2012-02-06 23 views
1

我的單個winform應用程序中有很多TextBoxes。我正在尋找一種方法來將單個事件方法綁定到所有這些文本框時加載窗體或在其構造函數中,所以我不會將事件添加到設計器中的每個單獨的文本框。將事件綁定到winform中的所有文本框中

在活動現場,我要檢測的輸入鍵,然後編程點擊一個按鈕:

private void ApplyFilterOnEnterKey(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     btnApplyFilters_Click(this, null); 
    } 
} 

現在的問題是我遍歷在我的表單中的所有文本框和如何將它們綁定到上述方法?我的文本框無處不在,嵌套的tablelayoutpanels或嵌套的普通pannels。這個循環的外觀如何,我應該把它放在哪裏?在窗體構造函數中還是在加載事件中?

回答

1

而不是訂閱每個TextBox的KeyDown事件,你有兩個其他的選擇,我認爲是更好的:

  1. 通過將表單的AcceptButton屬性設置爲您想要通過按Enter鍵單擊的按鈕,將您的按鈕設置爲表單的默認按鈕。

  2. 覆蓋ProcessDialogKey你的表格上,並檢查按Enter鍵:

    protected override bool ProcessDialogKey(Keys keyData) 
    { 
        if (keyData == Keys.Enter) 
        { 
         // ... do what you want 
         return true; 
        } 
        else 
         return base.ProcessDialogKey(keyData); 
    } 
    
+0

由於這是一個更好的主意! – 2012-02-06 11:09:17

1

只需使用Controls集合,並期待在控制那麼一個文本框通過所有文本框(包括嵌套)這樣的追加事件

1

循環如下所示:Loop through Textboxes

然後,

var allTextBoxes = this.GetChildControls<TextBox>(); 

foreach (TextBox tb in this.GetChildControls<TextBox>()) 
{ 
    tb.Click += ApplyFilterOnEnterKey; 
} 
相關問題