2013-09-29 48 views
1

我有一個問題,使checkedlistbox顯示窗口應用程序的消息框中的所有選擇。我只獲得了最後一個顯示的選擇。例如,我選擇「一,三,五」,只有五個顯示器。Checklistbox問題顯示在消息框中的選擇

這裏是我的代碼:

 string display = ""; 
     foreach (object selectedItems in clb.CheckedItems) 
     {    
      if (clb.SelectedItems.Count != 0) 
      { 
       display = "Items needed\n-----------\n\n\n" + selectedItems.ToString(); 
      } 
      else 
      { 
       display = "No items selected"; 
      } 
     } 
      MessageBox.Show(display, "Title"); 

任何想法,以點我在正確的方向,以實現這一目標表示讚賞。

回答

0

你的錯誤是在考驗前開始循環選中/檢查的項目數量。您的循環會繼續更改每個循環中變量顯示的值。最後,變量只包含最後一項檢查/選擇。

所以,我假設你想顯示的checkeditems,而不是選定的項目。
在任何情況下,您需要遍歷集合(本例中爲ChekedItems)並在字符串構建器中累積要顯示的項目文本。

string display = ""; 

// Every item in this collection is an item 
// with CheckState = Checked or Indeterminate 
if (clb.CheckedItems.Count != 0) 
{ 
    StringBuilder sb = new StringBuilder(); 
    foreach(string item in clb.CheckedItems) 
     sb.AppendLine(item); 
    display = "Items needed\n-----------\n\n\n" + sb.ToString(); 
} 
else 
{ 
    display = "No items checked"; 
} 
MessageBox.Show(display, "Title"); 

如果你真的想在selecteditems循環中,代碼是一樣的,只是使用SelectedItems集合

+0

謝謝,這個作品! – user1863593

0

需要Concat的所選擇的項目,如display +=或更好地使用Stringbuilder

display += " Items needed\n-----------\n\n\n" + selectedItems.ToString(); 

或者你可以做如下

if(clb.CheckedItems.Count >0) 
    display = "Items needed\n-----------\n\n\n" + string.Join(",", clb.CheckedItems.Select(i=>i.ToString())); 
else 
    display = "No items selected";