通过代码选择多个Listbox项目

5

你好,我已经搜索了很长时间,但似乎找不到解决问题的方法。我尝试了多种方法来通过代码选择列表框中的多个项目,但都没有成功。我最好的结果是在列表框中选择了一个项目。

基本上,我想选择相同值的多个项目。

以下是我的代码,抱歉如果我看起来像个新手,但我刚开始学编程并且还在学习一些基础知识。

 foreach (string p in listBox1.Items)
 {
           if (p == searchstring) 
           {
                 index = listBox1.Items.IndexOf(p);
                 listBox1.SetSelected(index,true);

           }
 }

所以你可以看到,我试图告诉程序循环遍历我的列表框中的所有项目,并为每个等于“searchstring”的项目获取索引并将其设置为选定。

然而,所有这些代码所做的就是选择第一个等于“searchstring”的项目,使其被选中并停止,它不会迭代所有“searchstring”项目。


4
你的列表框的SelectionMode属性是否设置为Multiple - shf301
1个回答

13

根据评论的建议,您应该根据自己的需求将SelectionMode设置为MulitSimpleMultiExpanded,但是您还需要使用forwhile循环而不是foreach,因为foreach循环在迭代期间不允许更改集合。因此,即使设置此属性也无法使您的代码运行,并且会抛出异常。请尝试以下代码:

for(int i = 0; i<listBox1.Items.Count;i++)
{
     string p = listBox1.Items[i].ToString();
     if (p == searchstring)
     {
          listBox1.SetSelected(i, true);

     }
}

您可以在使用设计器时,在属性窗口中设置 SelectionMode,或者例如在您的 Form 的构造函数中使用以下代码进行设置:

listBox1.SelectionMode = System.Windows.Forms.SelectionMode.MultiSimple;

他的foreach循环没问题。你只是不能在迭代的集合中添加或删除项目。而他并没有这样做。 - Lee O.
1
@LeeO。你自己试试,你会发现它会抛出异常。在大多数情况下,我在发布之前会检查代码(只要我能够创建测试环境),我没有足够的声望来允许自己发布不起作用的代码。 - Nikola Davidovic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接