1

我在获取选中列表框以在 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");

任何可以为我指明正确方向以实现这一目标的想法都值得赞赏。

4

2 回答 2

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";
于 2013-09-29T16:43:57.473 回答
0

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

因此,我假设您要显示选中的项目,而不是选定的项目。
在任何情况下,您都需要遍历集合(在本例中为 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 上循环,代码是一样的,只是使用 SelectedItems 集合

于 2013-09-29T16:44:40.253 回答