[英]How to generate events automatically for buttons without creating manually from properties if there are 'n' number of buttons?
IDE:Visual Studio 2010语言:c#.net
我正在从属性手动生成按钮事件。 但是,如果有20个按钮执行相同的任务,如“鼠标悬停”和“鼠标离开”,它将变得非常漫长。 那么,有没有办法复制所有其他按钮的事件?
您可以将所有按钮订阅到同一个事件处理程序:
foreach(var button in Controls.OfType<Button>())
{
button.MouseHover += Button_MouseHover; // add handler
button.MouseLeave += Button_MouseLeave;
}
在该处理程序中,您可以通过将事件源转换为按钮类型来确定引发了哪个确切的按钮:
private void Button_MouseHover(object sender, EventArgs e)
{
var button = (Button)sender; // sender is one of buttons
// use button.Name
}
上面的代码订阅所有按钮的事件。 但是如果你想过滤它们(例如按名称),你可以添加过滤:
Controls.OfType<Button>().Where(b => b.Name.StartsWith("foo"))
按钮可以共享同一个事件,如果每个按钮执行类似的任务,则不需要为每个按钮分配单独的事件。 ( object sender
参数将为您提供单击的控件。
如果您在设计器中选择了所有按钮(通过按住ctrl键),则可以轻松地为所有20个按钮分配1个事件
在生活中,你找不到一切的捷径,
简而言之,没有捷径,但如其他帖子中提到的那样,如果你有相同的事件处理程序和相同的动作,那么这将有助于减少你的工作。
您不必手动执行此操作,也可以从代码中添加事件处理程序。 此外,如果所有按钮的逻辑非常相似,那么您可以对所有按钮使用单个事件处理程序。 每个事件处理程序都有sender属性,该属性将设置为导致事件的按钮。
简单的例子是这样的:
//at first assign event handlers
button1.Click += new EventHandler(Button_Click);
button2.Click += new EventHandler(Button_Click);
//single event handler
private void Button_Click(object sender, System.EventArgs e)
{
// Add event handler code here.
Debug.WriteLine("You clicked: {0}", sender);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.