如何为许多标签编写常见的ClickEvent?

我在面板上有10个标签 – 和10个相同的ClickEvents(更改BackColor)。
我怎么能减少代码,即编写一个通用的程序?
就像是:

foreach (Control c in panelA.Controls) if (c.Tag == "abc" && c.is clicked) c.BackColor = Color.Crimson; 

迭代标签并将处理程序连接到Click事件:

 foreach (Control c in panelA.Controls) { c.Click += HandleClick; } 

然后,在单击处理程序中,您可以使用sender参数更改背景颜色,该参数将包含单击所在的标签:

 private void HandleClick(object sender, EventArgs e) { ((Control)sender).BackColor = Color.Crimson; } 

你不能将每个按钮连接到同一个事件处理程序吗?

 button1.Click += ChangeBackColor; button2.Click += ChangeBackColor; ... button10.Click += ChangeBackColor; private void ChangeBackColor(object sender, EventArgs e) { Control control = (Control)sender; control.BackColor = Color.Crimson; } 

您可以将每个标签的click事件分配给同一个事件处理程序,然后查看事件处理程序中的sender对象。 它会告诉您单击了哪个标签。

 private void OnLabelClick(object sender, EventArgs e) { var label = sender as Label; if(label != null) label.BackColor = Color.Crimson; } 

使用发件人:

尝试这样的事情:

 private void label_Click(object sender, EventArg e){ ((Label)sender) = ..your code }