我的程序使用分开的容器,面板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次测试中做到这一点。我必须独立检查两个面板。
答案 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");