检查窗体上的按钮单击事件

本文关键字:单击 事件 按钮 窗体 检查 | 更新日期: 2023-09-27 18:13:43

我现在有一个大约有13个按钮的表单。

我希望能够执行一个功能时,其中一个按钮被单击。但我试图保持有13个不同的按钮点击事件。

是否有一些方法让我能够确定何时任何按钮点击事件被触发,并能够告诉哪个按钮触发它?

谢谢!

检查窗体上的按钮单击事件

设置一个函数来处理所有的点击事件,并使用'sender'对象的属性来识别特定的按钮

你可以有不同的按钮点击处理程序,并根据按钮的动作命名它们,你也可以有一个单一的事件处理程序,在这种情况下,参数sender可以被转换为按钮,例如通过它的名字,找到相关的按钮。

但我提供,如果你有类似的行为在一组按钮映射到一个功能,但如果行动是不同的,使用不同的方法是更好的,但在所有13个按钮的一个形式是不好的,你可以把它们改为菜单,标签,…

foreach (Control ctl in this.Controls)
{
   if (ctl is Button)
      (ctl as Button).Click += MyButtonHandler;
}
protected void MyButtonHandler(object sender, EventArgs e)
{
  Button clickedButton = sender as Button;
  //...
}

回调函数的第一个参数是被按下的按钮

private void OnButtonClicked(object sender, EventArgs e){
   Button oButton = sender as Button;
   if (oButton != null){
     // your logic goes here !
   }
}

oButton变量是当前按钮。(重要检查oButton != null时使用as运算符)

在点击事件中,你得到一个对Sender的引用——这是被点击的按钮,在里面,你可以测试内容或标签,并根据值采取行动:

private void Button_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show((sender as Button).Tag.ToString());
}

我认为在这种情况下使用委托是合适的。查看这些链接以获取有关实施的更多信息。

    c#工作站教程:委托和事件介绍
  • c#/.NET中的委托和事件

每个适当的事件处理程序都有一个对象发送者参数。通过在属性窗口的OnClick事件中输入相同的名称,为所有13个按钮赋予相同的处理程序,例如:OnAnyButtonClicked。创建的函数将是:

private void OnAnyButtonClicked(object sender, ...)
{
    // sender is the button that was clicked,
    // find out which button is clicked
    // call the corresponding function
}

提示:

要找出哪个按钮被按下了,可以使用Object。ReferenceEquals一个更快的方法来避免它…然后……否则如果…然后……其他的如果……是使用每个按钮的Tag属性。给每个按钮。标记一个与必须执行的操作相对应的enum值,并使用switch语句查找必须执行的操作。

你也可以传递一个委托给按钮。标签,但这几乎等同于为每个按钮创建不同的onClick事件处理程序。