如何检查splitcontainer中的所有文本框?

时间:2012-01-06 05:19:44

标签: c# testing loops foreach splitcontainer

我的程序使用分开的容器,面板1和1都是2有文本框。我试图在程序试图关闭时运行检查,提示用户保存。我尝试了下面的代码,但它似乎没有用,因为文本框在splitcontaier中(只是猜测)。

private void button1_Click(object sender, EventArgs e)
    {
        foreach ( TextBox tb in this.Controls.OfType<TextBox>()) 
        {
            tb.Text = "Save";

        }
    }

当我在表单中包含文本框的程序上使用代码时,它可以工作。当我尝试使用文本框在面板内时,它不会。如果我使用指定splitcontainer的代码

,它也不起作用
  foreach ( TextBox tb in splitContainer1.Controls.OfType<TextBox>()) 
       {               
           tb.Text = "Save";
        }

如何解决splitcontainer中的文本框?

我可以指定特定面板中的文本框,并且每次1个:

//this works, but only populates those text boxes in panel1
foreach ( TextBox tb in splitContainer1.Panel1.Controls.OfType<TextBox>() ) 
       {               
           tb.Text = "save";
        }

但我仍然无法在1次测试中做到这一点。我必须独立检查两个面板。

1 个答案:

答案 0 :(得分:2)

你需要像Leepie评论的那样,递归检查某种类型的所有控件。

使用这样的方法,你可以在每个TextBox上执行一个动作方法。

public void ModifyControl<T>(Control root, Action<T> action) where T : Control
{
    if (root is T)
        action((T)root);
    // Call ModifyControl on all child controls
    foreach (Control control in root.Controls)
        ModifyControl<T>(control, action);
}

你称之为:

ModifyControl<TextBox>(splitContainer1, tb => tb.Text = "Save");