我有一个用C#编写的程序,带有一个清除按钮,需要清除整个表单的内容。对于我在foreach上用于radiobuttons的按钮和一个用于复选框的按钮。
foreach (RadioButton rad in quiztabs.TabPages)
{
rad.Checked = false;
}
foreach (CheckBox chk in quiztabs.TabPages)
{
chk.Checked = false;
}
然而,当我点击清除按钮时,我得到一个Unable to cast object of type System.Windows.Forms.TabPage to type System.Windows.Forms.RadioButton
。
答案 0 :(得分:18)
你误解了foreach
的行为:它不会过滤 TabPages
中的所有元素,它会尝试投射所有元素
如果你想过滤,你可以使用LINQ:
显式地这样做 foreach (RadioButton rad in quiztabs.TabPages.OfType<RadioButton>())
{
rad.Checked = false;
}
foreach (CheckBox chk in quiztabs.TabPages.OfType<CheckBox>())
{
chk.Checked = false;
}
但是,这仍然无法解决您的问题,因为TabPages collection仅包含TabPage
元素。您可能想要的是这样的:
foreach (TabPage page in quiztabs.TabPages)
{
foreach (RadioButton rad in page.Controls.OfType<RadioButton>())
{
rad.Checked = false;
}
foreach (CheckBox chk in page.Controls.OfType<CheckBox>())
{
chk.Checked = false;
}
}
答案 1 :(得分:5)
使用OfType<T>()
方法:
foreach (RadioButton item in yourChildern.OfType<RadioButton>())
{
//your code
}
答案 2 :(得分:2)
使用
quiztabs.TabPages.OfType<RadioButton>()
和quiztabs.TabPages.OfType<CheckBox>()
代替quiztabs.TabPages
代码。
Alternativly;
foreach(Control c in this.Controls)
{
if(c is RadioButton)
{
c.Checked = false;
}
}
foreach(Control i in this.Controls)
{
if(i is CheckBox)
{
i.Checked = false;
}
}
答案 3 :(得分:0)
您的问题是.TabPages
是标签页的列表...我相信您想要每个标签页上的控件
foreach(TabPage t in quizTabs.TabPages)
{
foreach (RadioButton rad in t.Controls)
{
rad.Checked = false;
}
foreach (CheckBox chk in t.Controls)
{
chk.Checked = false;
}
}
答案 4 :(得分:0)
foreach
需要有一个迭代器(此处为rad
),你想要迭代的任何类型(TabPages
):
所以它看起来像:
foreach (TabPage tab in quiztabs.TabPages) {
虽然TabPages
是quiztabs.TabPages
所属的任何类型的对象。
希望这是有道理的!
答案 5 :(得分:0)
因为,标签不是radioButton
,你应该这样做,
foreach(TabPage tp in quizTabs.TabPages)
{
foreach (RadioButton rad in tp.Controls.OfType<RadioButton>())
{
rad.Checked = false;
}
foreach (CheckBox chk in tp.Controls.OfType<CheckBox>())
{
chk.Checked = false;
}
}
答案 6 :(得分:0)
在该列表中选择一个 List<>
类型的RadioButton和所有单选按钮。
List<RadioButton> list = new List<RadioButton>();
list.Add(radioButton1);
list.Add(radioButton2);
list.Add(radioButton3);
foreach (RadioButton item in list)
{
if(tabControl1.SelectedTab==tabControl1.TabPages[tabControl1.SelectedIndex])
item.Checked = false;
}