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



我有很多标签自定义控件,比如100个。我想给他们一个鼠标悬停事件。我可以这样写:

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

然后我需要做100次。因为我有100个。有没有一种方法可以只做一次?我想我应该在我的custom_label类声明函数,但到目前为止,我不能使它工作。知道怎么做吗?

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

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 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使其响应更快(更快的反应!)

首先,创建一个公共事件,我们在这里接收标签。

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

为表单上的所有标签提供公共事件。这里我假设标签名称以label开头,例如label1,label2,label3

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();
}

最新更新