我正在 Visual C# 2010 中创建一个 Windows 窗体应用程序。
我有二十个名为 button1、...、button20 的按钮和二十个名为 label1、...、label20 的标签。如何更改 label1 的文本以响应对 button1 的单击,并且与每个按钮标签对类似,而无需 20 个单独的事件处理函数?
看在上帝的份上为什么!!!
但实际上,您可以使用键控到按钮的字典,例如:
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,将您的按钮和标签收缩包装到一个整洁的包中。
当您要反复使用一组控件时,创建一个将它们合并在一起的自定义用户控件会更容易。
所以在这种情况下,创建一个带有标签和按钮的新用户控件。在按钮的 onclick 处理程序中,将 label.Text 更改为您想要的任何内容。构建您的项目。
将新创建的用户控件添加到主窗体 20 次。由于按钮已经与它们各自的标签相关联,因此您不需要为每个按钮设置单独的处理程序。
(请记住,您现在有 20 个名为 userControl1、userControl2 等的控件……因此,如果您需要对它们的内部内容做任何其他事情,则需要进行额外的处理。但为了这个示例,您不需要不必担心这个。)
您可以将所有事件订阅到一个处理程序并检查第一个参数“发件人”。发件人应该是按钮,你可以检查它的ID。