【问题标题】:Cannot get label.text c#无法获取label.text c#
【发布时间】:2016-09-06 23:59:20
【问题描述】:

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

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

我尝试添加 name like="some text" + i,但在所有选项卡上都相同,但它不起作用。

谢谢!

【问题讨论】:

  • 出现消息框,但为空白
  • 好像标签对象的实例化仅限于void方法,你需要把它outsidevoid方法
  • labelChoosenType_Click() 方法中,labelChoosenType 标识符指的是什么?它绝对不是引用EvalType() 方法中声明的local 变量labelChoosenType。你有没有把它设置为有用的东西?请提供一个好的minimal reproducible example 可靠地重现问题。哦,这个词拼写为“选择”。

标签: c# event-handling label add creation


【解决方案1】:

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

您添加到TabControl 的每个新Label 都是new 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
    }
}

【讨论】:

    【解决方案2】:

    您需要在当前结构中声明标签对象 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);
    }
    

    尝试检查这是否可行。

    【讨论】:

    • 我已经在问题之前声明了它,只是没有提到它 - 抱歉和拼写错误
    • Label 对象只能在 void EvalType() 函数中访问 - 这是不正确的。对它的引用也将添加到TabControl 对象并作为object sender 携带到点击事件处理程序中。
    猜你喜欢
    • 2011-04-30
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    相关资源
    最近更新 更多