单击按钮时将“所有”文本框隐藏在一起
本文关键字:文本 隐藏 在一起 所有 按钮 单击 | 更新日期: 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 迭代使它们不可见。