【发布时间】:2011-12-22 07:50:03
【问题描述】:
在 C# 窗体窗口中,假设我有 5 个控件。我只是隐藏了其中的一些。当我运行程序时,应该会出现 (Visible=true) 控件。我想单击一个按钮以显示或取消隐藏所有控件。我该怎么做?
【问题讨论】:
在 C# 窗体窗口中,假设我有 5 个控件。我只是隐藏了其中的一些。当我运行程序时,应该会出现 (Visible=true) 控件。我想单击一个按钮以显示或取消隐藏所有控件。我该怎么做?
【问题讨论】:
对于 Winforms,试试这个:
foreach (Control c in Controls) {
c.Visible = true;
}
此代码循环遍历表单上的所有控件并将Visible 属性设置为true,以使每个控件可见。
【讨论】:
你可以让它递归,然后如果你有任何面板/组框,他们的孩子也会变得可见。
public void MakeVisible(Control control)
{
if(control.HasChildren)
{
foreach (Control child in control.Controls)
{
MakeVisible(child);
}
}
control.Visible = true;
}
【讨论】:
类似
foreach (var controlObj in form.Controls)
((Control)controlObj).Visible = True;
应该可以解决问题。这只是在表单中显示所有控件。 (注意Form.Controls是一个无类型的集合,只包含Objects,所以你必须公平地转换它们)
如果您只有 5 个控件,您也可以单独显示它们,可能采用类似的方法
void showHiddenControls(bool show) {
control1.Visible = show;
control2.Visible = show;
// ...
}
这样做的好处是您可以使用showHiddenControls(true) 显示它们并使用showHiddenControls(false) 再次隐藏它们。
【讨论】:
您需要在后面的代码中更改可见属性。
例如
button1.visible = true;
并为每个隐藏的控件、按钮或不这样做。
只是补充一下,我怀疑您是否希望通过其他所有人建议的所有控件进行循环。更改表单上所有内容的可见性是浪费时间,如果您在不同场景中仅显示某些控件,可能会导致后续复杂化。
由于它只有 5 个控件,我会坚持单独更改每个控件。
【讨论】:
如果你想隐藏/显示所有内容,
foreach (Control cr in this.Controls)
cr.Visible = false; // or true, if you want to show everything
【讨论】:
主要的想法是创建这样的对象:
Label toto = new Label():
(...) Do whatever you wan't to initialize your object
toto.Visible = false;
Button makeItAppear = new Button();
(..) Do whatever you wan't to initialize this button
然后在点击事件上添加一个处理程序:
makeItAppear.Click += new System.EventHandler(MakeItAppear);
然后在 eventHandler 中:
private void MakeItAppear(object sender, EventArgs e)
{
this.toto.Visible = true;
}
最好的办法是创建一个函数,让它出现并由 Handler 调用。当然,如果您要让多个对象出现或消失,请在此函数中对所有对象执行相同操作。
【讨论】: