我在面板上有10个标签 - 和10个相同的ClickEvents(更改BackColor)
我怎么能减少代码,即写一个通用的程序?
类似的东西:
foreach (Control c in panelA.Controls)
if (c.Tag == "abc" && c.is clicked)
c.BackColor = Color.Crimson;
答案 0 :(得分:3)
你不能将每个按钮连接到同一个事件处理程序吗?
button1.Click += ChangeBackColor;
button2.Click += ChangeBackColor;
...
button10.Click += ChangeBackColor;
private void ChangeBackColor(object sender, EventArgs e)
{
Control control = (Control)sender;
control.BackColor = Color.Crimson;
}
答案 1 :(得分:3)
您可以将每个标签的click事件分配给同一个事件处理程序,然后查看事件处理程序中的 sender 对象。它会告诉你哪个标签被点击了。
private void OnLabelClick(object sender, EventArgs e)
{
var label = sender as Label;
if(label != null)
label.BackColor = Color.Crimson;
}
答案 2 :(得分:3)
迭代标签并将处理程序连接到Click事件:
foreach (Control c in panelA.Controls)
{
c.Click += HandleClick;
}
然后,在点击处理程序中,您可以使用sender
参数更改背景颜色,该参数将包含点击的标签:
private void HandleClick(object sender, EventArgs e)
{
((Control)sender).BackColor = Color.Crimson;
}
答案 3 :(得分:2)
使用发件人:
尝试这样的事情:
private void label_Click(object sender, EventArg e){
((Label)sender) = ..your code
}