【问题标题】:How to show all hidden controls of a Form in C#?如何在 C# 中显示窗体的所有隐藏控件?
【发布时间】:2011-12-22 07:50:03
【问题描述】:

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

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    对于 Winforms,试试这个:

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

    此代码循环遍历表单上的所有控件并将Visible 属性设置为true,以使每个控件可见。

    【讨论】:

    • @H.Wardak:你为什么要关心它是递归的?
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      类似

      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) 再次隐藏它们。

      【讨论】:

        【解决方案4】:

        您需要在后面的代码中更改可见属性。

        例如

        button1.visible = true;
        

        并为每个隐藏的控件、按钮或不这样做。

        只是补充一下,我怀疑您是否希望通过其他所有人建议的所有控件进行循环。更改表单上所有内容的可见性是浪费时间,如果您在不同场景中仅显示某些控件,可能会导致后续复杂化。

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

        【讨论】:

          【解决方案5】:

          如果你想隐藏/显示所有内容,

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

          【讨论】:

            【解决方案6】:

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

            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 调用。当然,如果您要让多个对象出现或消失,请在此函数中对所有对象执行相同操作。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2016-11-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多