C#发送按钮点击同一个对象

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

谢谢

是的 – 这是完全可能的。

你没有说你是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中的同一个处理程序:

   

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

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

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

等等

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

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

是的,可以在“属性窗口”设计器的“ 事件”选项卡中选择所需的方法(可以从主菜单中显示它:“视图” – >“属性”窗口):

事件标签

或者在.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; } } 

不过,您应该小心这一点,看看它是否真的为您提供了共享事件处理程序的好处,而不是为不同的按钮创建单独的处理程序。