检查多个面板中的控件

本文关键字:控件 检查 | 更新日期: 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包含textBoxAddress1panel包含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);
}