如何为许多标签编写常见的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 }