2011-06-11 141 views
1

可能重复:
C# Sending buttonclicks to same ObjectC#如何使用点击事件处理多个按钮

我已经在我的项目有很多按钮。通过编辑Designer.cs文件并将每次点击指向我的方法,使每个点击按钮的时间缩短为相同的“Button_click”方法。

this.button1.Click += new System.EventHandler(this.Mymethod); 

如何识别Mymethod方法中按下哪个按钮?

谢谢!

+0

DUP http://stackoverflow.com/questions/6315737/c-sending-buttonclicks-to-same-object – 2011-06-11 12:36:34

+3

除非我误以为,你应该把()关掉this.MyMethod。看起来你正在调用Mymethod并将Mymethod的返回值传递给EventHandler(这不起作用)。 – 2011-06-11 12:36:35

回答

7

的MyMethod必须声明是这样的:

void Mymethod (object sender, EventArgs e) 
{ 
    if (sender == btn1) 
     MessageBox.Show ("Button1"); 
} 

使用发件人的说法。这是你的按钮(引发事件的对象)。

5

单击处理通常的结构是这样的:

protected void MyButton_Click(object sender, EventArgs e) 

在此,你要寻找的是object sender。这将是对发送点击事件的控件的引用。它的盒装作为object但如果你知道的类型(在你的情况,你说,他们所有的按钮),那么你可以将它转换:

var myButton = (Button)sender; 
2

你可能会发现,这个问题更清洁的方法是设置每个按钮的CommandName和CommandArgument,而不是使用OnClick使用共享的OnCommand处理程序。

该处理程序将接受CommandEventArgs参数而不是EventArgs参数,并且您将能够直接询问它以查看单击按钮的CommandName和CommandArgument。所有的按钮,想有相同的点击句柄数像1

,并把这种形式的构造函数来设置所有按钮单击事件处理程序

public void SetButtonClick(Control parent) 
    { 
     if (parent is Button) 
     { 
       (parent as Button).Click += new EventHandler(this.Mymethod); 
     } 
     foreach (Control item in parent.Controls) 
     { 
      SetButtonClick(item); 
     } 
    } 

用于检查按钮

1

一套标记属性按下检查按钮标记