2011-11-04 42 views
1

我目前有一個窗體上有大約13個按鈕。檢查窗體上的按鈕單擊事件 - C#

我希望能夠執行一個功能,當其中一個按鈕被點擊。但我試圖阻止13個不同的按鈕點擊事件。

有沒有辦法讓我能夠確定什麼時候點擊任何按鈕事件被觸發,並且能夠判斷哪個按鈕被觸發了?

謝謝!

+1

作爲一名程序員,他被迫接管了其他人編寫的許多應用程序:如果我繼承了一個帶有13個按鈕的表單,每個表單都有自己的點擊事件處理程序,我會很高興,因爲這將是完全的正常和預期。相反,如果我遇到了一些本地系統,其中有13個按鈕連接到一個點擊事件處理程序,其中一個case語句根據發件人按鈕的文本確定要執行哪個操作,我會很不高興。 – MusiGenesis

+0

我同意你的意見。但是我正在寫卡片遊戲,我正在從不同類型的卡片組中選擇卡片遊戲。所有的事件都調用相同的功能,我發現沒有必要讓13個按鈕點擊事件都調用相同的功能。 – Johnrad

+0

是的,這是不同的,完全有效的。如果所有的按鈕都調用完全相同的代碼(並且沒有可怕的case語句),那麼將一個事件處理程序分配給所有按鈕不僅可以,而且更可取。 – MusiGenesis

回答

2

你可以有不同的按鈕點擊處理程序,並根據按鈕操作命名它們,也可以爲它們全部設置單個事件處理程序,在這種情況下,可以將參數sender轉換爲按鈕,例如通過它的名稱,查找相關按鈕。

但我提供如果你有類似的按鈕組的行爲映射到一個單一的功能,但如果行動是不同的使用不同的方法更好,但在所有的形式與13按鈕不好,你可以改變它們菜單,標籤,...

0

回調函數的第一個參數是被按下的按鈕。

4

有一個函數可以處理所有的點擊事件,並使用「發件人」對象的屬性來標識特定的按鈕。

0
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; 
    //... 
} 
0
private void OnButtonClicked(object sender, EventArgs e){ 
    Button oButton = sender as Button; 
    if (oButton != null){ 
    // your logic goes here ! 
    } 
} 

oButton變量是當前的按鈕。 (重要如果oButton != null使用as操作時檢查)上的你到了發件人參考click事件

0

- 這是點擊按鈕,以便裏面,你可以測試基礎上的內容或標籤和行爲值:

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

每一個適當的事件處理程序都有一個對象發送參數。通過在「屬性」窗口的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事件處理程序幾乎相同。