我有一个包含多个面板的程序,文本框将共享一个值。例如街道地址。我已经编写了一种方法,可以通过共享TextChanged
事件来更新这些值,但是事件不会在面板中搜索控件,它只会影响主窗体窗口中的TextBox
。 / p>
代码。
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;
答案 0 :(得分:1)
为此目的,您需要一个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);
}