Checklistbox问题在消息框中显示选择

时间:2013-09-29 16:38:13

标签: c#

我遇到问题,让checkedlistbox在Windows应用程序的消息框中显示所有选择。我只选择了最后一个显示。例如,我选择“一,三和五”,只有五个显示。

这是我的代码:

       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");

任何能够指出我朝着正确的方向努力实现这一目标的想法都值得赞赏。

2 个答案:

答案 0 :(得分:0)

您需要连接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";

答案 1 :(得分:0)

您的错误是在选择/检查项目数测试之前开始的循环中。您的循环继续在每个循环中更改变量显示的值。最后,变量仅包含最后检查/选择的项目。

所以,我假设您要显示检查项目,而不是选择项目 在任何情况下,您都需要遍历集合(在本例中为ChekedItems)并在stringbuilder中累积您要显示的项目文本。

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集合