检查多个面板中的控件
本文关键字:控件 检查 | 更新日期: 2023-09-27 18:29:33
我有一个程序,它有多个带有文本框的面板,这些文本框将共享一个值。例如街道地址。我已经编码了一种方法,通过共享TextChanged
事件来更新这些值,但是该事件不会在面板中搜索控件,它只会影响主窗体窗口中的TextBox
。
代码。
private void matchtextbox(object sender, EventArgs e)
{
TextBox objTextBox = (TextBox)sender;
string textchange = objTextBox.Text;
foreach (Control x in this.Controls)
{
if (x is TextBox)
{
if (((TextBox)x).Name.Contains("textBoxAddress"))
{
((TextBox)x).Text = textchange;
}
}
}
}
所以说panel1
包含textBoxAddress1
,panel
包含textBoxAddress2
,两者都有这个TextChanged
事件。它们在键入时不会互相更新。然而,如果他们在panel
之外,他们会这样做。
最终代码,这是基于下面一个可爱的社区成员的决议。
private void Recursive(Control.ControlCollection ctrls)
{
foreach (var item in ctrls)
{
if (item is Panel)
{
Recursive(((Panel)item).Controls);
}
else if (item is TextBox)
{
if (((TextBox)item).Name.Contains("txtSAI"))
{
((TextBox)item).Text = textchange;
}
}
}
}
private void matchtextbox(object sender, EventArgs e)
{
TextBox objTextBox = (TextBox)sender;
textchange = objTextBox.Text;
Recursive(Controls);
}
string textchange;
为此需要一个递归方法:
private void Recursive(IEnumerable ctrls)
{
foreach (var item in ctrls)
{
if (item is Panel)
{
Recursive(((Panel)item).Controls);
}
else if(item is TextBox)
{
if (((TextBox)item).Name.Contains("textBoxAddress"))
{
((TextBox)item).Text = textchange;
}
}
}
}
然后这样称呼它:
private void matchtextbox(object sender, EventArgs e)
{
Recursive(Controls);
}