检索上下文之外的值

时间:2018-02-15 15:47:35

标签: c# winforms

我动态创建控件,我希望能够在上下文之外使用它们。

例如动态创建的标签:

i = 0;

while (readerBE.Read())
{
    Label labelBE = new Label();
    labelBE.Name = "labelBE" + i;
    labelBE.Text = readerBE["codeArticleComposant"].ToString();
    labelBE.Cursor = Cursors.Hand;
    labelBE.Click += new EventHandler(this.labelBE_Click);

    i++;
}

当我尝试使用OnClick事件来检索这样的值时:

private void labelBE_Click(object sender, EventArgs e)
{
    Console.WriteLine(labelBE.Text);
}

labelBE在当前上下文中不存在。

2 个答案:

答案 0 :(得分:2)

您可以投射sender参数:

private void labelBE_Click(object sender, EventArgs e)
{
    Label labelBE = (Label) sender;
    Console.WriteLine(labelBE.Text);
}

但有一件事,你有一个while - 循环并且你总是创建这个Label并且你永远不会将它添加到任何容器控件(如GroupBoxPanelForm)。所以你永远不会创建多个,while - 循环是错误的,应该用if替换,或者你应该将标签添加到集合或父控件(好吧,你应该这样做)

答案 1 :(得分:0)

您可以使用生成点击的sender对象:

private void labelBE_Click(object sender, EventArgs e)
{
    Console.WriteLine(((Label)sender).Text);
}

但我建议您详细了解Variable scope

您的问题是您在方法中创建了一个变量,因此一旦离开它就无法再访问该变量。