[英]foreach c# gives unable to cast error
我有一個用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
。
你誤會的行為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集合只包含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;
}
}
使用OfType<T>()
方法:
foreach (RadioButton item in yourChildern.OfType<RadioButton>())
{
//your code
}
采用
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;
}
}
你的問題是.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;
}
}
foreach
需要有一個迭代器(此處為rad
),它與您想要迭代的任何類型相同( TabPages
):
所以它看起來像:
foreach (TabPage tab in quiztabs.TabPages) {
雖然TabPages
是quiztabs.TabPages
任何類型的對象。
希望這是有道理的!
因為,標簽不是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;
}
}
取一個 List<>
類型的RadioButton和該列表中的所有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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.