2016-08-11 90 views
-1

我正在製作一個程序,該程序必須計算檢查多少個CheckBox控件,僅在GroupBox中。GroupBox中檢查了多少個CheckBox?

我嘗試了很多不同的方法,但我無法得到它的工作。

這怎麼做?

// This is one of the many things I tried...   
public CheckBox rNum; 
//This method is used on FormLoad. 
public void CreateBoxes() 
{ 
    for (int i = 0; i < 36; i++) 
    { 
     rNum = new CheckBox(); 
     rNum.Text = i.ToString(); 

     //CheckBoxes added to flowLayoutPanel. 
     flw.Controls.Add(rNum); 
    } 
} 

public int count;   
//This method is used on Button Click 
public void CountIt() 
{ 
    foreach (CheckBox box in groupBox.Controls.OfType<CheckBox>()) 
    { 
     if (box.Checked) 
     { 
      count++; 
     } 
    }  
    MessageBox.Show(count.ToString()); 
} 
+2

如果您可以確切地說出哪些功能無效,那將會很有幫助。計數是否過高?計數是零嗎?是「組合框」的「CheckBoxes」直接子代還是有一箇中間「Panel」或類似的東西? – adv12

+1

請注意,當您增加'count'時,您實際上並沒有檢查是否選中了「CheckBox」。 –

+1

您在我的答案的評論中說,您在「Form」中創建了75個「CheckBoxes」 s'Load'事件處理程序。你加什麼控制?到'groupBox'?或者到「形式」?還是對其他一些控制? – adv12

回答

1

根據您的意見和編輯你的問題,你需要在FlowLayoutPanel在尋找你的CheckBoxes在其中添加它們,不groupBox。鑑於您的FlowLayoutPanel被稱爲flw,請執行下列操作:

public void CountIt() 
{ 
    foreach (CheckBox box in flw.Controls.OfType<CheckBox>()) 
    { 
     if (box.Checked) 
     { 
      count++; 
     } 
    } 

    MessageBox.Show(count.ToString()); 
} 

請注意,我只增加當CheckBox檢查計數,這是目前體現在你的問題。沒有做到這一點檢查是你的原代碼中的一個錯誤。

+0

感謝您的回覆。但是這不會以某種方式,我以前嘗試過... MessageBox始終顯示0 ... – Mizuchi

+1

然後請提供我在我對該問題的評論中請求的信息。 – adv12

+0

我忘了補充說,大約有35個複選框,所以我使用'Checkbox chk = new CheckBox()'在forload循環中創建了它們。 – Mizuchi

2

您可以使用LINQ查詢是這樣的:

var count = flw.Controls.OfType<CheckBox>().Count(x=>x.Checked); 

它返回FLW的CheckBox控制計數被檢查。

+0

看來你需要在標題中進行更正,在你說的代碼中* // CheckBoxes添加到flowLayoutPanel。*但是標題中你要求* GroupBox中的複選框?*。無論如何,如果它們是以任何方式託管的,只需使用該控件上的查詢即可。 –

+0

flw的啓示來自原始問題的編輯。 – adv12

+0

@ adv12看來OP在編輯後忘記了更正題目和描述。在標題和問題描述中,它們的意思可能是FlowLayoutPanel。 –

相關問題