0

我正在制作的程序需要大量用户输入。用户选择了一个命令,并且相应的组框可见,我保存当前的组框以供以后使用。如果组框在 GUI 中不重叠,则下面的代码可以完美运行。我想要的是能够将所有的组框堆叠在一起,这仍然可以工作。

for (int i = 0; i < funcCodes.Length; i++)
  {
    byte z = funcCodes[i];
    GroupBox gb = (GroupBox)Controls["gbDisplay_FC" + z];
    if (z == zcontrol.getFunctionCode())
    {
        gb.Visible = true;
        currentGB = gb;
    }
    else
        gb.Visible = false;
  }

我得到的失败是当它们被堆叠时 gb 变为空(找不到组框)感谢 C# 的任何帮助。

Edit1:如果您只是使用属性而不是拖放来更改组框的位置,则下面的评论也有效,这使它成为一个孩子。

4

2 回答 2

1

搜索您的控件名称,然后使用 Controls.Find() 如下所示:

        Control[] gbs = this.Controls.Find("gbDisplay_FC" + z.ToString(), true);
        if (gbs.Length > 0 && gbs[0] is GroupBox)
        {
            GroupBox gb = (GroupBox)gbs[0];
            // .. do something with "gb" ...
        }

无论 GroupBox 是由 Form 直接包含,还是“堆叠”导致它们被另一个包含,这都将起作用。

于 2013-10-25T16:50:20.033 回答
0

然后只需添加一个空检查

for (int i = 0; i < funcCodes.Length; i++)
  {
    byte z = funcCodes[i];
    GroupBox gb = (GroupBox)Controls["gbDisplay_FC" + z];


    if(gb == null)
      continue;


    if (z == zcontrol.getFunctionCode())
    {
        gb.Visible = true;
        currentGB = gb;
    }
    else
        gb.Visible = false;
  }
于 2013-10-25T16:02:20.257 回答