C# 将事件分配给 "group" 个控件?

C# assign an event to a "group" of controls?

我有大量标签自定义控件,比方说 100 个。 我想给他们一个 MouseHover 事件。 我可以做类似的事情:

private void label_custom1_MouseHover(object sender, EventArgs e)
        {
            TextBox.Text = label_custom1.backcolor.ToString();
        }

但是我需要这样做 100 次。因为我有 100 个。 有没有办法只做一次? 我想我应该在我的 custom_label class 中声明该函数,但到目前为止我无法让它工作。 知道如何进行吗?

像这样只创建一个事件处理程序方法:

private void Label_MouseHover(object sender, EventArgs e)
{
    TextBox.Text = (sender as Label).BackColor.ToString();
}

并将所有事件订阅到该方法:

 this.label_custom1.MouseHover += Label_MouseHover;
 this.label_custom2.MouseHover += Label_MouseHover;

首先,创建一个共同的事件,我们收到这里发布的标签。

private void Common_MouseHover(object sender, EventArgs e)
{
    TextBox.Text = (sender as Label).BackColor.ToString();
}

将公共事件赋予表单上的所有标签。这里我假设 Label 名称以 label 开头,例如 label1label2label3 ...

private void SetEventAllLabels()
{
    var labels = Controls.OfType<Label>().Where(x => x.Name.StartsWith("label"));
    foreach (var label in labels)
    {
        label.MouseHover += Common_MouseHover;
    }
}

在窗体的Load方法中调用SetEventAllLabels()方法

private void Form1_Load(object sender, EventArgs e)
{
    SetEventAllLabels();
}

谢谢,这很有帮助。

虽然这部分没有工作,它无法识别控件:

private void SetEventAllLabels()
{
    var labels = Controls.OfType<Label>().Where(x => x.Name.StartsWith("label"));
    foreach (var label in labels)
    {
        label.MouseHover += Common_MouseHover;
    }
}

所以我创建了一个包含所有标签名称的列表,然后它使用这个工作:

foreach (string i in liste)
            {
                CustomLabel x = (CustomLabel)(this.Controls.Find(i, true).FirstOrDefault() as Label);
                x.MouseEnter += Common_MouseHover;

             }

附带说明一下,使用 MouseEnter 而不是 MouseHover 可以提高响应速度(反应更快!)