C#:控件的可见性

本文关键字:可见性 控件 | 更新日期: 2023-09-27 18:24:38

我遇到了一个问题,如果没有合适的搜索关键字,我找不到任何有用的东西。

在我的表单控件属性中有:文本框、按钮、复选框和列表框。它们位于面板(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";

当我在另一个节目中只需要盒子1时,问题就解决了***()。盒子2不会变成隐形的。如果我尝试做喜欢:

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

它附带了NullReferenceExection(我知道这意味着什么)。但当我做第一个简单的代码时,运行起来没有任何问题(只有这个小错误)。

一个面板中有太多的控件需要单独处理。

因此,为了更准确:

面板上最多有两个标签"已启用"。

    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.:如果我没记错的话,它在我添加面板之前就坏了。

C#:控件的可见性

它是hd.default_panel.Controls.

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