我动态创建控件,我希望能够在上下文之外使用它们。
例如动态创建的标签:
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
在当前上下文中不存在。
答案 0 :(得分:2)
您可以投射sender
参数:
private void labelBE_Click(object sender, EventArgs e)
{
Label labelBE = (Label) sender;
Console.WriteLine(labelBE.Text);
}
但有一件事,你有一个while
- 循环并且你总是创建这个Label
并且你永远不会将它添加到任何容器控件(如GroupBox
,Panel
或Form
)。所以你永远不会创建多个,while
- 循环是错误的,应该用if
替换,或者你应该将标签添加到集合或父控件(好吧,你应该这样做)
答案 1 :(得分:0)
您可以使用生成点击的sender
对象:
private void labelBE_Click(object sender, EventArgs e)
{
Console.WriteLine(((Label)sender).Text);
}
但我建议您详细了解Variable scope。
您的问题是您在方法中创建了一个变量,因此一旦离开它就无法再访问该变量。