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";
        }

我怎样才能让它解决拆分容器中的文本框?

我可以在特定面板中指定文本框,并一次执行 1 个:

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

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

4

1 回答 1

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");
于 2012-01-06T07:05:34.683 回答