如何在单击按钮时隐藏“所有”文本框?是否有任何简短的方法可以避免一个接一个地隐藏它们?
gamma_textBox.Visible = false;
答案 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迭代使其不可见。