检查多个面板中的控件
Checking Controls in multiple panels
我有一个包含多个面板的程序,这些面板的文本框将共享一个值。例如街道地址。我已经编写了一种通过共享 TextChanged
事件来更新这些值的方法,但是该事件不会在面板中搜索控件,它只会影响主窗体 [=28] 中的 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;
为此,您需要一个 recursive 方法:
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);
}
我有一个包含多个面板的程序,这些面板的文本框将共享一个值。例如街道地址。我已经编写了一种通过共享 TextChanged
事件来更新这些值的方法,但是该事件不会在面板中搜索控件,它只会影响主窗体 [=28] 中的 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;
为此,您需要一个 recursive 方法:
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);
}