繁体   English   中英

如果有'n'个按钮,如何自动为按钮生成事件而无需手动创建属性?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM