【问题标题】:C#: Visibility of controlsC#:控件的可见性
【发布时间】:2015-11-25 16:37:13
【问题描述】:

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

在我的表单控件属性中,有: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(我知道这是什么意思)。但是当我做简单的第一个代码运行时没有任何问题(只有这个小错误)。

面板中有很多控件需要单独处理。

所以为了更准确:

面板上有两个标签“启用”。

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

【问题讨论】:

  • 您的代码有语法错误(例如Form1 hd = (Form1)Application.OpenForms["form1];)。请编辑您的问题以解决它们。
  • 你为什么还要选角? Visible 定义在Control 中,无需转换为TextBox。如果您要查看c 是否为TextBox,则只需在尝试为Visible 赋值之前检查:if (c is TextBox) { c.Visible = false; }。如果cnull,那么它显然不是TextBox,你应该继续迭代(我猜c 来自foreach......这里有很多猜测,你的问题缺少很多信息)
  • c 显然不是 TextBox 因此它是空的...
  • 如果你只想要TextBoxes,那么你可以使用hd.Controls.OfType<TextBox>,你不应该得到NullReferenceException
  • 我不明白,伙计们。我尝试了 InBetween 的 if 语句,它没有打开文本框。我编辑了我的问题以更准确。

标签: c# winforms


【解决方案1】:

它是 hd.default_panel.Controls。

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

【讨论】:

    猜你喜欢
    • 2011-10-12
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    • 2022-06-30
    • 2011-04-21
    • 2011-08-24
    • 2011-10-05
    相关资源
    最近更新 更多