C#将按钮单击发送到同一个对象

时间:2011-06-11 11:53:32

标签: c#

我的项目中有很多按钮。为了使程序更短,需要将按钮的每次单击都设置为相同的“Button_click”方法。这可能吗?

谢谢

3 个答案:

答案 0 :(得分:5)

只需对所有按钮使用相同的事件处理程序。在代码中,这将是:

button1.Click += HandleButtonClick;
button2.Click += HandleButtonClick;

也应该可以在设计师中做到。

如果这些是不同形式的按钮,则需要在某处具有静态处理程序方法,或者每个表单都需要对具有处理程序方法的任何类的引用。您可能需要在代码中添加这些处理程序,而不是使用设计器。

答案 1 :(得分:2)

是的 - 这完全有可能。

你没有说你是WinForms还是WPF,但基本的方法是创建一个私有方法,它是处理程序,然后从每个按钮处理程序调用它:

private void ButtonHandler(some arguments)
{
}

private void OnButton1Click(object sender, EventArgs e)
{
    ButtonHandler(some arguments);
}

但是,您可以为每个按钮的click事件订阅相同的处理程序:

Button1.Click += ButtonHandler;
Button2.Click += ButtonHandler;

或者从设计器中设置这些 - 只需从下拉列表中选择现有方法,而不是创建新的处理程序。

使用WPF,您可以非常轻松地将每个按钮单击绑定到XAML中的相同处理程序:

<Button x:Name="Button1" Click="ButtonHandler" ... />
<Button x:Name="Button2" Click="ButtonHandler" ... />

设计师再次为您提供了选择现有处理程序以及创建新处理程序的选择。

答案 2 :(得分:0)

是的,只需在属性窗口设计器的事件标签中选择所需的方法(您可以在主菜单中显示它:View - &gt; Properties Window):

events tab

或者在<Formname>.Designer.cs文件中手动执行:

this.button1.Click += new System.EventHandler(this.button1_Click);
//...
this.button2.Click += new System.EventHandler(this.button1_Click);

此外,如果您想要执行稍微不同的操作,并且仍然只使用一个方法,请使用sender参数。它的值始终是对单击按钮的引用,因此您可以通过查看按钮的NameTag属性来执行某些逻辑:

private void button1_Click(object sender, EventArgs e)
{
    Button btn = (Button)sender;

    switch((int)btn.Tag) {
        case 1:
             // action 1
             break;
        case 2:
             // action 2
             break;
    }
}    

但是,你应该小心这一点,看看它是否真的给你带来共享事件处理程序的好处,而不是为不同的按钮创建单独的处理程序。