0

单击按钮时如何将“所有”文本框隐藏在一起?有什么简短的方法可以避免一一隐藏它们吗?

gamma_textBox.Visible = false;
4

5 回答 5

4
foreach(var tb in this.Controls.OfType<TextBox>()) tb.Visible = false;

但请注意,这不会查看任何容器内部。您可以通过枚举每个孩子的Controls集合来递归地执行此操作。这方面的一个例子是:

public void HideChildTextBoxes(Control parent)
{
    foreach(Control c in parent.Controls)
    {
        HideChildTextBoxes(c);
        if(c is TextBox) c.Visible = false;
    }
}
于 2013-01-26T12:06:22.533 回答
3

您可以使用这种通用的递归方法:

private void ProcessAllControls<T>(Control rootControl, Action<T> action)where T:Control
{
    foreach (T childControl in rootControl.Controls.OfType<T>())
    {
        action(childControl);
    }
    foreach (Control childControl in rootControl.Controls)
    {
        ProcessAllControls<T>(childControl, action);
    }
}

它是这样工作的:

ProcessAllControls<TextBox>(this, txt=> txt.Visible = false);

此方法递归搜索给定容器控件的所有子控件以查找指定类型的控件。然后它应用一个动作(在这种情况下它会改变Visibility).

如果您希望它用于任何类型的控制,请使用非泛型重载:

public static void ProcessAllControls(Control rootControl, Action<Control> action)
{
    foreach (Control childControl in rootControl.Controls)
    {
        ProcessAllControls(childControl, action);
        action(childControl);
    }
}
于 2013-01-26T12:10:47.803 回答
2

如果你使用 Winforms,你可以这样做;

for (int i = 0; i < this.Controls.Count; i++)
{
   if (this.Controls[i].GetType().ToString() == "System.Windows.Forms.TextBox")
       this.Controls[i].Visible = false;
}
于 2013-01-26T12:09:01.540 回答
1

将它们粘贴到面板(或其他容器)中,并设置该面板的可见性。

于 2013-01-26T12:10:22.713 回答
0

您可以将所有文本框放入LIST(或数组)中,然后使用 for 迭代使它们不可见。

于 2013-01-26T12:10:59.170 回答