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

本文关键字:文本 事件 嵌套 TableLayoutPanel 检测 | 更新日期: 2023-09-27 18:15:44

我有一系列嵌套的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和....我需要把这个指向我的循环吗?
  • 或者我在主布局面板内递归地循环每个布局面板?
  • 还是整个想法都错了?!!?

谢谢。

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

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);
    } 
}

parent TableLayoutPanel

调用这个方法