检测嵌套TableLayoutPanel中所有文本框的keypress事件

时间:2011-11-26 21:45:45

标签: c# winforms events loops controls

我有一系列嵌套的TableLayoutPanel控件,每个控件都包含许多TextBox个控件。

我认为为每个文本框创建一个按键事件是疯狂的。所以我要做的是拥有一个公共事件方法,然后在FormLoad事件上为所有文本框应用该事件。我想要做的是查看用户是否在任何这些文本框中按了Enter键。

这是我的常用方法(我希望它没有任何问题!):

private void ApplyFiltersOnEnterKey(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar == (char)13)
    {
        tsApplyFilters_Click(this, null);
    }
}

我在表单的Load事件中有以下代码:

    //Applying common event for all textboxes in filter options!
foreach (var control in tableCriterias.Controls)
{
    var textBox = control as TextBox;
    if (textBox != null)
        textBox.KeyPress += new KeyPressEventHandler(this.ApplyFiltersOnEnterKey);
} 

好吧,也许你已经猜到了,上面的代码不起作用!我可以列出我能想到的问题:

  • tableCriterias这是父TableLayoutPanel,所有其他布局面板都位于其中,它本身位于一系列Panel SplitContainer内......我是需要在我的循环中指出这个吗?
  • 或者我是否以递归方式遍历主layoutpanel内的每个布局面板?
  • 或者整个想法是错的?!!?

感谢。

1 个答案:

答案 0 :(得分:2)

private void Recursive(TableLayoutPanel tableCriterias)
{
    foreach (var control in tableCriterias.Controls)
    {
        var textBox = control as TextBox;
        if (textBox != null)
            textBox.KeyPress += new KeyPressEventHandler(this.ApplyFiltersOnEnterKey);
        else if(control is TableLayoutPanel)
            Recursive(control as TableLayoutPanel);
    } 
}

并为父级 TableLayoutPanel

调用此方法