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

本文关键字:文本 隐藏 在一起 所有 按钮 单击 | 更新日期: 2023-09-27 17:56:02

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

gamma_textBox.Visible = false;

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

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

您可以使用以下通用递归方法:

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

如果你使用 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;
}

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

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