我有一系列嵌套的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
内......我是需要在我的循环中指出这个吗?感谢。
答案 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
调用此方法