在任何按钮中单击的事件(C#窗体)

我正在开发一个程序,它有许多按钮,点击时应该执行类似的操作,但根据点击的按钮有很小的差异。 问题是唯一直接的路径是为每个按钮编写代码,这将是一个非常重复的任务。 有没有办法只编程一个块,可以点击任何按钮,单击哪个按钮?

为所有按钮分配相同的事件处理程序。

 foreach (var button in Controls.OfType 

或者,您可以在切换到事件的属性窗口中选择相同的事件处理程序(闪存图标)。


 private static void button_Click(object sender, EventArgs eventArgs) { switch (((Button)sender).Name) { // find a way to disambiguate. } } 

您还可以向Tag属性添加一些有用的信息以用于消除歧义。 最后但并非最不重要的是,您可以从Button派生自己的按钮并添加适当的属性。 它们甚至会出现在属性窗口中。

通过双击其中一个按钮创建一个按钮单击处理程序。 但是不要对其他按钮执行相同操作,请转到属性窗口并切换到事件视图。 现在依次选择其余每个按钮,并从属性窗口中其他按钮的Click事件的下拉列表中选择刚创建的单击处理程序。 现在,当它们被点击时,它们都会触发相同的方法。

在此处输入图像描述

 private void button1_Click(object sender, EventArgs e) { var btn = (Button)sender; switch (btn.Name) { case "button1": ... break; case "button2": ... break; case "button3": ... break; default: break; } } 

或者,您可以在属性窗口中为按钮的Tag属性定义值,并直接使用它,而无需使用switch或if语句。

您还可以使用sender == button1直接测试特定按钮,但这在switch语句中不起作用。


创建自己的Button并添加所需的属性可能更容易。 编译完成后,您的按钮将显示在“工具箱”中,您的属性可以在属性窗口中设置。

 public class MyButton : Button { public int A { get; set; } public int B { get; set; } } 

用法:

 private void button1_Click(object sender, EventArgs e) { var btn = (MyButton)sender; DoSomething(btn.A, btn.B); } 

有没有办法只编程一个块,可以点击任何按钮,单击哪个按钮?

我只会使用相同的点击事件,并有条件地检查发件人点击了哪个按钮

 private void button1_Click(object sender, System.EventArgs e) { if(sender == button1) { //do something different for button1 } else if(sender == button2) { .... } } 

或者转换声明..

是的,您只需创建一个按钮单击事件处理程序,并使用可视工作室设计器将其与所有按钮连接起来。

这很简单,只需按照以下步骤操作:

1)通过双击任何按钮为任何一个按钮创建btn_click事件处理程序。 2)对于所有其他按钮,右键单击任何按钮,单击属性,转到事件,在“单击”事件上,从下拉列表中选择btn_click。

如果要在同一事件处理程序中的不同按钮中使用不同的function,可以将sender参数向下转换为Button类型,然后使用其Name属性来区分按钮。

这是一个例子:

 private void btn_Click(object sender, System.EventArgs e) { Button b =(Button)sender; if(b.Name == "button1") { //some code } else if(b.Name == "button2") { .... } }