无法获得标签.文本c#

本文关键字:文本 标签 | 更新日期: 2023-09-27 18:05:51

我是c#的新手,现在我有一个我无法解决的问题。

我在多个标签页上创建了相同的标签:

    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);
    }

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

我试过添加像= "some text" + I这样的名称,但它在所有选项卡上都是一样的,并且它不起作用。

谢谢!

无法获得标签.文本c#

无需查看更多代码…我最好的猜测是,您在labelChooseType_Click()事件处理程序中所指的labelChoosenType不是您认为的Label

您添加到TabControl中的每个新Label都是new Label -和而不是,即EvalType()方法之外的labelChoosenType所引用的标签。因此,当您单击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
    }
}

你需要声明标签对象Public/Private(它需要在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);
}