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
开头,例如 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();
}
谢谢,这很有帮助。
虽然这部分没有工作,它无法识别控件:
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 可以提高响应速度(反应更快!)
我有大量标签自定义控件,比方说 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
开头,例如 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();
}
谢谢,这很有帮助。
虽然这部分没有工作,它无法识别控件:
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 可以提高响应速度(反应更快!)