按名称引用表单元素

时间:2013-02-21 17:00:46

标签: c# winforms

我正在使用Visual C#2010创建Windows窗体应用程序。

我有20个名为button1,...,button20的按钮和20个名为label1,...,label20的标签。如何更改label1的文本以响应单击button1,并且类似于每个按钮标签对而没有20个单独的事件处理函数?

3 个答案:

答案 0 :(得分:7)

为了上帝的爱,为什么!!!

但实际上你可以使用键入该按钮的字典,例如:

Dictionary<Button,Label> dict = new Dictionary<Button,Label>();

    dict.Add(button1,label1);
    ...

然后你可以这样做:

private void ButtonClick(object sender, EventArgs e)
{
    Label label = dict[(Button)sender];
    label.Text = "Hello";
}

然后所有按钮都可以使用相同的点击处理程序。

您也可以类似地使用Button.Tag并将该点指向每个标签。

但是,我认为更好的解决方案是开发一个自定义UserControl,将你的按钮和标签收缩包装成一个整齐的包。

答案 1 :(得分:1)

当您要反复使用一组控件时,可以更轻松地制作将它们组合在一起的自定义用户控件。

因此,在这种情况下,使用标签和按钮创建一个新的用户控件。在按钮的onclick处理程序中,将label.Text更改为您想要的任何内容。建立你的项目。

将新创建的用户控件添加到主窗体20次。由于按钮已经与各自的标签相关联,因此您不需要为每个按钮分别设置单独的处理程序。

(请记住,您现在有20个名为userControl1,userControl2等的控件...所以如果您需要对其内部内容执行任何其他操作,则需要执行其他处理。但是,为了这个示例, ,你不必担心这个。)

答案 2 :(得分:0)

您可以将所有事件订阅到一个处理程序并检查第一个参数'sender'。发件人应该是按钮,您可以查看其ID。