2012-12-13 37 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