2016-09-06 73 views
-1

我是C#中的新手,现在我遇到了一个我无法解决的问题。无法获取label.text c#

我已经创建了多个的TabPages相同的标签:

public Label ChosenType = new Label(); 

    private void EvalType() 
    { 
     Label labelChosenType = new Label(); 
     labelChosenType.AutoSize = false; 
     labelChosenType.Left = 710; 
     labelChosenType.Top = 3; 
     labelChosenType.Width = 350; 
     labelChosenType.Height = 96; 
     labelChosenType.Text = "Some text"; 
     labelChosenType.Font = new Font("Arial", 14, FontStyle.Bold); 
     labelChosenType.TextAlign = ContentAlignment.MiddleCenter; 
     labelChosenType.BackColor = Color.Red; 
     labelChosenType.ForeColor = Color.White; 
     labelChosenType.Click += new EventHandler(labelChosenType_Click); 
     tabControl1.SelectedTab.Controls.Add(labelChosenType); 
    } 

    private void SetGeneralInfo() 
    {   
     for (int i = 0; i < tabControl1.TabCount; i++) 
     { 
      tabControl1.SelectTab(i); 
      EvalType(); 
     } 
    } 

    private void labelChosenType_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show(labelChosenType.Text); 
    } 

的问题是,消息框为空。为什么我无法从标签中获得文字? (这不是主要功能,但这是最简单的方法,以显示问题)

我试图添加名称= =“一些文本”+我,但它是所有标签上的相同,它didn没有工作。

谢谢!

+0

出现的消息框,但它是空白 – donmichael

+0

好像标签对象的实例仅限于虚空方法,你需要把它'outside'虚空方法 – TheQuestioner

+2

在'labelChoosenType_Click()'方法,“labelChoosenType”标识符指的是什么?它肯定不会引用'EvalType()'方法中声明的** local **变量'labelChoosenType'。你有没有把它设置为有用的东西?请提供可靠地再现问题的良好[mcve]。哦,这个词拼写为“选择”。 –

回答

0

没有看到更多的代码...我最好的猜测是你所指的labelChooseType_Click()事件处理程序中的labelChoosenType不是你认为的Label

每个新Label添加到TabControlnew Label - 和标签由labelChoosenTypeEvalType()方法的简称。因此,当您单击Label时,text属性引用您尚未使用EvalType()方法初始化的另一个对象。

如果您尝试在单个事件处理函数中处理同一类型的多个对象,那么使用参数object sender会更好。就目前而言,完全不清楚labelChoosenType引用的是什么对象。

private void labelChoosenType_Click(object sender, EventArgs e) 
{ 
    Label clickedLabel = sender as Label; 
    if (clickedLabel != null) 
    { 
     MessageBox.Show(clickedLabel.Text); 
    } 
    else 
    { 
     // clickedLabel is not a Label or is null, do something else 
    } 
} 
-1

需要声明的标签对象公开/私有(它需要的void函数外)作为当前的结构,标签对象仅在void EvalType()功能

public Label labelChoosenType = new Label(); 

private void EvalType() 
{ 
    labelChoosenType.AutoSize = false; 
    labelChoosenType.Left = 710; 
    labelChoosenType.Top = 3; 
    labelChoosenType.Width = 350; 
    labelChoosenType.Height = 96; 
    labelChoosenType.Text = "Some text"; 
    labelChoosenType.Font = new Font("Arial", 14, FontStyle.Bold); 
    labelChoosenType.TextAlign = ContentAlignment.MiddleCenter; 
    labelChoosenType.BackColor = Color.Red; 
    labelChoosenType.ForeColor = Color.White; 
    labelChoosenType.Click += new EventHandler(labelChoosenType_Click); 
    tabControl1.SelectedTab.Controls.Add(labelChoosenType); 
} 

private void labelChoosenType_Click(object sender, EventArgs e) 
{ 
    MessageBox.Show(labelChoosenType.Text); 
} 

尝试和检查访问如果这可行。

+0

我已经在问题之前宣布了它,只是没有提到它 - 对不起,拼写错误 – donmichael

+0

* Label对象只能在void EvalType()函数中访问* - 这不是真的。对它的引用也将被添加到“TabControl”对象中,并作为“对象发送者”携带到click事件处理程序中。 – khargoosh