2011-12-22 218 views
1

在C#窗体中,假设我有5个控件。我只是隐藏其中的一些。当我运行该程序时,只会出现(Visible = true)控件。我想单击一个按钮以显示或取消隐藏所有控件。我怎样才能做到这一点?如何在C#中显示窗体的所有隐藏控件?

回答

2

你可以让它递归,如果你有任何面板/组框,他们的孩子也会变得可见。

public void MakeVisible(Control control) 
{ 
    if(control.HasChildren) 
    { 
     foreach (Control child in control.Controls) 
     { 
      MakeVisible(child); 
     } 
    } 
    control.Visible = true; 
} 
2

您将需要更改后面的代码中的可见propery。

例如

button1.visible = true; 

并为每个隐藏的控件,按钮做或不做。

只是添加我怀疑你会想通过所有其他人建议的控制循环。如果您在不同情况下仅显示某些控件,则更改表单上所有内容的可见性会浪费时间,并且可能会导致跟踪效果进一步恶化。

由于它只有5个控件,我会坚持单独更改每个控件。

4

有关的WinForms,试试这个:

foreach (Control c in Controls) { 
    c.Visible = true; 
} 

代码遍历窗体上的所有控件并设置Visible属性设置为true,使每一个可见。

+1

@H。Wardak:你为什么会在乎它是递归的? – 2011-12-22 08:22:12

1

如果你想隐藏/显示的一切,

foreach (Control cr in this.Controls) 
     cr.Visible = false; // or true, if you want to show everything 
1

喜欢的东西

foreach (var controlObj in form.Controls) 
    ((Control)controlObj).Visible = True; 

应该做的伎俩。这只是显示全部控件的形式。 (注意:Form.Controls为仅包含Object秒的非类型化的集合,所以你要投他们AFAIR)

如果你只有5控制,你也可以单独给他们,也许在像

void showHiddenControls(bool show) { 
    control1.Visible = show; 
    control2.Visible = show; 
    // ... 
} 
的方法

这样做的好处是您可以使用showHiddenControls(true)来显示它们,并使用showHiddenControls(false)再次隐藏它们。

0

主要的想法是这样的创建对象:

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

然后在事件处理程序:

private void MakeItAppear(object sender, EventArgs e) 
{ 
    this.toto.Visible = true; 
} 

最好的会是创建一个函数,使其出现并由Handler调用。当然,如果你有多个对象可以出现或消失,在这个函数中对所有对象都做同样的事情。