【发布时间】:2011-06-11 21:07:45
【问题描述】:
我的项目中有很多按钮。为了使程序更短,我需要让每次单击按钮都使用相同的“Button_click”方法。这可能吗?
谢谢
【问题讨论】:
-
是的,这是可能的。只需为他们的所有点击事件订阅相同的方法。
-
现在我陷入了一个 inf 循环。谢谢科迪。
标签: c#
我的项目中有很多按钮。为了使程序更短,我需要让每次单击按钮都使用相同的“Button_click”方法。这可能吗?
谢谢
【问题讨论】:
标签: c#
只需对所有按钮使用相同的事件处理程序。在代码中,这将是:
button1.Click += HandleButtonClick;
button2.Click += HandleButtonClick;
等
在设计器中应该也可以。
如果这些是不同形式的按钮,您需要在某处有一个 static 处理程序方法,或者每个窗体都需要对具有该处理程序方法的任何类的引用。您可能需要在代码中添加这些处理程序,而不是使用设计器。
【讨论】:
是的 - 这是完全可能的。
你没有说你是 WinForms 还是 WPF,但基本的方法是创建一个私有方法作为处理程序,然后从每个按钮处理程序调用它:
private void ButtonHandler(some arguments)
{
}
private void OnButton1Click(object sender, EventArgs e)
{
ButtonHandler(some arguments);
}
但是,您可以为每个按钮的单击事件订阅相同的处理程序:
Button1.Click += ButtonHandler;
Button2.Click += ButtonHandler;
或从设计器中设置这些 - 只需从下拉列表中选择现有方法,而不是创建新的处理程序。
使用 WPF,您可以很容易地将每个按钮单击绑定到 XAML 中的同一个处理程序:
<Button x:Name="Button1" Click="ButtonHandler" ... />
<Button x:Name="Button2" Click="ButtonHandler" ... />
设计器再次为您提供选择现有处理程序以及创建新处理程序的选择。
【讨论】:
int value,然后使用ButtonHandler(10) 或一些计算结果为整数的表达式调用
是的,这是可能的,只需在属性窗口设计器的 事件 选项卡中选择您需要的方法(您可以从主菜单中显示它:查看 -> 属性窗口):
或者在<Formname>.Designer.cs文件中手动操作:
this.button1.Click += new System.EventHandler(this.button1_Click);
//...
this.button2.Click += new System.EventHandler(this.button1_Click);
此外,如果您想根据按下的按钮执行稍微不同的操作并且仍然只使用一种方法,请使用sender 参数。它的值将始终是对被单击按钮的引用,因此您可以通过查看按钮的 Name 或 Tag 属性来执行一些逻辑:
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;
}
}
不过,您应该小心这一点,看看共享事件处理程序而不是为不同的按钮创建单独的处理程序是否真的会给您带来任何好处。
【讨论】: