2012-12-13 40 views
7

我有三个按钮,分别在onClick事件上调用btn_Clicked。在后面的代码中,我想获取导致回发的按钮的ID。我知道我可以分配每个按钮来调用不同的方法,但我想了解一点ASP.Net。也告诉我哪种方法更有效率?在不同按钮点击或调用相同方法时调用不同的方法(如果每个按钮的功能相同)。如何检测后面代码中点击哪个按钮?

+1

使用发送对象事件处理程序。 – ryadavilli

+0

学习mvc而不是 – Jeroen

回答

20

将发件人对象转换为按钮,然后您可以获取所有属性。

Button clickedButton = (Button)sender; 

还告诉我哪种方法更有效?通过不同的按钮点击或调用相同方法调用不同的方法 (如果每个按钮的功能相同)。

如果功能相同,那么最好只有一个事件,因为您不必复制代码。请记住DRY principle

请看下面的例子:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Button clickedButton = sender as Button; 

    if (clickedButton == null) // just to be on the safe side 
     return; 

    if (clickedButton.ID == "Button1") 
    { 
    } 
    else if(clickedButton.ID == "Button2") 
    { 
    } 
} 
3

检查您的回调方法的sender参数是否为同一基准按钮你有兴趣

Button button1; 
Button button2; 

void OnClick(object sender, RoutedEventArgs args) 
{ 
    Button button = sender as Button; 
    if (button == button1) 
    { 
     ... 
    } 
    if (button == button2) 
    { 
     ... 
    } 
} 
+0

这实际上让我感到有点惊讶。我以为==会使用Object.equals,它会测试它们是否是相同的引用。什么部分是不正确的? – ceyko

+0

它可能是最好的做法,无论如何(可能是必要的),因此我的编辑:) – ceyko

+0

我会争论,如果它的最佳做法或不,如果你想访问ButtonID或其他一些其他信息的属性。您必须将对象投射到按钮上,就像您现在正在做的那样 – Habib