1

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

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

4 回答 4

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;
}
于 2012-06-22T17:17:53.220 回答
3

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

private void OnLabelClick(object sender, EventArgs e)
{
    var label = sender as Label;
    if(label != null)
        label.BackColor = Color.Crimson;
}
于 2012-06-22T17:18:40.467 回答
3

遍历标签并将处理程序连接到 Click 事件:

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

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

private void HandleClick(object sender, EventArgs e)
{
    ((Control)sender).BackColor = Color.Crimson;
}
于 2012-06-22T17:21:14.430 回答
2

使用发件人:

尝试这样的事情:

private void label_Click(object sender, EventArg e){
  ((Label)sender) = ..your code
}
于 2012-06-22T17:19:15.303 回答