2013-09-29 22 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";