2012-02-06 77 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; 
}