我的程序使用一个拆分容器,两个面板1&2个有文本框。当程序试图关闭时,我正在尝试运行一个提示用户保存的检查。我尝试了以下代码,但它似乎不起作用,因为文本框在splitcontaier中(只是猜测)。
private void button1_Click(object sender, EventArgs e)
{
foreach ( TextBox tb in this.Controls.OfType<TextBox>())
{
tb.Text = "Save";
}
}
当我在表单中有文本框的程序中使用这段代码时,它就起作用了。当我尝试在面板中文本框所在的位置使用它时,它不会。如果我使用指定拆分容器的代码,它也不起作用
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";
}
但我似乎仍然无法在一次测试中做到这一点。我必须独立检查两个面板。
您需要像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");