检查表单上的按钮单击事件 - C#

时间:2011-11-04 19:21:07

标签: c# events button

我目前有一张表格上有大约13个按钮。

我希望能够在单击其中一个按钮时执行功能。但我试图避免有13个​​不同的按钮点击事件。

我有什么方法可以确定何时触发任何按钮点击事件,并且能够告诉哪个按钮触发它?

谢谢!

8 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

您可以使用不同的按钮单击处理程序,并根据按钮操作对其进行命名,也可以为所有这些操作符设置单个事件处理程序,在这种情况下,参数sender可以转换为按钮,例如通过它名称,找到相关按钮。

但是我提供如果你在按钮组上有类似的行为将它们映射到单个函数,但如果使用不同的方法操作不同则更好,但是在所有一个带有13个按钮的表单中都不好,你可以将它们更改为菜单,标签,...

答案 2 :(得分:1)

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;
  //...
}

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

oButton变量是您当前的按钮。 (重要,以便在使用oButton != null运算符时检查as是否

答案 5 :(得分:0)

在点击事件中,您获得对发件人的引用 - 这是单击按钮,因此您可以测试内容或标记并根据值进行操作:

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

答案 6 :(得分:0)

我认为在这种情况下使用代表是正确的。请查看这些链接以获取有关实施的更多信息。

答案 7 :(得分:0)

每个正确的eventhandler都有一个Object sender参数。通过在“属性”窗口的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 一种更快的方法来避免如果......那么......如果......那么......其他如果...... 正在使用每个Button的Tag属性。 给每个Button.Tag一个与必须执行的操作相对应的枚举值,并使用switch语句来找出必须完成的操作。

您也可以将一个代表分配给button.Tag,但这与为每个按钮创建不同的onClick事件处理程序几乎相同。