检查多个面板中的控件

时间:2016-01-08 11:24:45

标签: c# textbox

我有一个包含多个面板的程序,文本框将共享一个值。例如街道地址。我已经编写了一种方法,可以通过共享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包含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;

1 个答案:

答案 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);
}