2013-10-25 47 views
0

我正在做的程序需要大量的用户输入。用户选择一个命令,并使相应的组框变为可见,并保存当前的组框供以后使用。如果组合框在GUI中不重叠,下面的代码完美地工作。我想要的是能够将所有的组合框叠加在一起,这样仍然可以工作。当groupbox在另一个groupbox功能找不到groupbox

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#的新帮助。

编辑1: 下面的评论的作品,以及如果你只是改变使用属性VS拖放的属性组的位置,使它成为一个孩子。

回答

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; 
    } 
+0

我明白你的意思,但这并不能解决问题,因为它需要在GUI中找到位于其他groupbox顶部的groupbox。检查null是很好的编程习惯,我应该已经在代码中。 – newrev426

+0

但是,正如你所说,它无效,如果它无法找到。如果它不存在,则无法找到它。那么如果它不存在,你想如何找到它? :) – VladL

+0

哦,对不起,我一定没有说清楚。所有的分组都在表格中。我永远不会得到空,而且我不会在组合框紧挨着表单上的海誓山盟时,但是当我将组合框放在彼此之上时,我不会。 – newrev426

1

难道然后用Controls.Find()这样你的控件名称搜索:在GroupBoxes是否直接包含

 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" ... 
     } 

这将工作通过表格或者“堆叠”使它们彼此包含在一起。

+0

仍然有一些问题,但你让我更加接近。没有意识到它让它们被包含在另一个中。谢谢您的帮助! – newrev426

+0

是的...这是一个常见的“错误”。首先发生的事情并不明显。通常我们看到这个问题与面板问而不是GroupBoxes –

+0

+ +1已经经历了相同的问题很久以前芽没有想到它现在:) – VladL