我正在尝试迭代单选按钮的 GroupBox 的 GroupBox,但我遇到了困难,因为 GroupBox 还包含其他节点,例如标签和文本框。 为了更好地说明,节点树是:
Groupbox
\/
GroupBox(es) + TextBox + Label
\/
RadioButton(s) + TextBox
我的目标是迭代所有可能的 RadioButtons,找到每个部分中哪些被选中(如果有的话)(或者换句话说,具有属性 (radiobuttonname).Checked == True) 不过,我似乎无法做到这一点,因为我想出的每个解决方案都存在问题。
代码:
int i = 0;
RadioButton[] currentData = [null, null, null, null, null, null, null, null];
foreach(Control group in check.Controls)
{
if (group is GroupBox)
{
foreach(Control rb in group.Controls)
{
if (rb is RadioButton) //All RadioButtons are correctly recognized (confirmed by print test)
{
if ((RadioButton) rb.**Checked**){ //Cannot Resolve Symbol "Checked"
currentData[i] = ((RadioButton) rb);
break;
}
}
}
i++;
}
}
return currentData;
上面应该先进入主GroupBox,然后进入各个次GroupBox,然后迭代每个RadioButton,将选中的RadioButton添加到要返回的数组中(如果没有就留空)。
解决方案/问题: -我可以将它们作为 foreach(RadioButton rb in group.Controls) 运行吗? 但如果我这样做,程序就会失败,因为我将 TextBox 转换为 Radiobutton -我可以将 foreach 作为 for 循环运行,找到绕过该问题的方法? 但是每个 GroupBox 中的节点数量各不相同,我不相信我可以像数组一样迭代一个 -我可以将控件(我知道是RadioButtons)投射为RadioButtons,如上所示? 但只要它们首先成为控件,它们似乎就失去了访问 .Checked 属性的能力 -我可以从 GroupBox 中删除所有非 RadioButtons 吗? 但这会破坏我正在制作的应用程序的意义......
如有任何帮助,我们将不胜感激。我已经坚持了好几天了,想继续前进。
尽管您将某事物称为特定事物,但并不一定如此。 您的 rb 变量是控制类型。但是,如果您将其投射到 RadioButton 并说它应该像它一样工作而不仅仅是其名称,那么它就会像您希望的那样工作。 有不止一种方法可以做到这一点,但你可以这样做:
foreach(Control cntrl in group.Controls)
{
if (cntrl is RadioButton rb) //All RadioButtons are correctly recognized (confirmed by print test)
{
//do stuff with you RadioButton rb
}
}