我正在制作的节目需要大量用户输入。用户选择一个命令,并使相应的组框可见,我保存当前的组框供以后使用。如果组框在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拖放更改组框的位置,使其成为子项。
答案 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;
}