单击按钮时,将“所有”文本框隐藏在一起

时间:2013-01-26 12:04:04

标签: c# winforms textbox

如何在单击按钮时隐藏“所有”文本框?是否有任何简短的方法可以避免一个接一个地隐藏它们?

gamma_textBox.Visible = false;

5 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分: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);
    }
}

答案 2 :(得分: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;
}

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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