簡體   English   中英

foreach c#給出無法施放錯誤

[英]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) {

雖然TabPagesquiztabs.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM