C#:控件的可见性

时间:2015-11-25 16:37:13

标签: c# winforms

我遇到了问题而没有正确的搜索关键字,我找不到任何有用的内容。

在我的表单中,控件属性有:TextBoxes,Buttons,CheckBoxes和ListBox。它们位于面板上(default_panel)。还有另一个名为:link_panel的小组。我认为值得记住。

因此,当我点击菜单按钮时,Show ***()会运行,首先隐藏所有控件。

Form1 hd = (Form1)Application.OpenForms["form1"];
foreach (Control c in hd.Controls)
{
c.Visible = false;
}

然后这个Show ***()开始启用(显示)所需的控件。

hd.box1.Visible = true;
hd.box2.Visible = true;
hd.label1.Visible = true;
hd.label1.Text = "Sample Text";

当我只需要另一个Show ***()中的box1时,问题就出现了。 box2不会变得隐形。如果我尝试这样做:

TextBox tb = c as TextBox;
tb.Visible = false;

这附带NullReferenceExecption(我知道这意味着什么)。但是当我做的很简单时,第一个代码运行没有任何问题(只有这个小bug)。

面板中有许多控件可以处理separetly。

因此更准确:

  

有两个标签"已启用"在小组讨论。

    public void ShowCharacterTable()
    {
        Form1 hd = (Form1)Application.OpenForms["form1"];
        foreach (Control c in hd.Controls)
        {
                c.Visible = false;
        }
        hd.label1.Visible = true;
        hd.label2.Visible = true;

这里有一个示例方法。

  

应该只有一个,但它们都是可见的。

public void ShowRelationTable()
    {

        Form1 hd = (Form1)Application.OpenForms["form1"];
        foreach (Control c in hd.Controls)
        {
            if (c is TextBox)
            {
                c.Visible = false;
            }

        }
        hd.label1.Visible = true;
}

Ps。:如果我没记错的话,在添加面板之前就已经开始了。

1 个答案:

答案 0 :(得分:0)

是hd.default_panel.Controls。

Form1 hd = (Form1)Application.OpenForms["form1"];
foreach (Control c in hd.panel_default.Controls)
{
  c.Visible = false;
}