我在面板上有 10 个标签 - 和 10 个相同的 ClickEvents(更改背景颜色)。
我怎样才能减少代码,即编写一个通用程序?
就像是:
foreach (Control c in panelA.Controls)
if (c.Tag == "abc" && c.is clicked)
c.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;
}
您可以将每个标签的单击事件分配给同一个事件处理程序,然后在您的事件处理程序中查看发送者对象。它会告诉你点击了哪个标签。
private void OnLabelClick(object sender, EventArgs e)
{
var label = sender as Label;
if(label != null)
label.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;
}
使用发件人:
尝试这样的事情:
private void label_Click(object sender, EventArg e){
((Label)sender) = ..your code
}