当groupbox处于另一个groupbox功能时,找不到groupbox

时间:2013-10-25 15:59:18

标签: c# search groupbox

我正在制作的节目需要大量用户输入。用户选择一个命令,并使相应的组框可见,我保存当前的组框供以后使用。如果组框在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变为null(无法找到groupbox)感谢C#的新任何帮助。

EDIT1: 以下注释以及如果您只是使用属性vs拖放更改组框的位置,使其成为子项。

2 个答案:

答案 0 :(得分: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中,还是“堆叠”使它们彼此包含在一起,这都将起作用。

答案 1 :(得分: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;
  }