如何为许多标签编写常见的Click事件?

时间:2012-06-22 17:16:07

标签: c# winforms click

我在面板上有10个标签 - 和10个相同的ClickEvents(更改BackColor) 我怎么能减少代码,即写一个通用的程序?
类似的东西:

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

4 个答案:

答案 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
}