如何确定ListBox中是否选择了多个项目

时间:2011-01-30 03:13:12

标签: c# listbox operators

我认为很明显我正在尝试做什么,但如果你不明白,请问。

if (listBox1.SelectedIndex == 1  && 2)
{
    label1.Text = "Sometext";
}

2 个答案:

答案 0 :(得分:6)

如果您启用了多选,

SelectedIndices就是您想要的。您还可以检查SelectedItems属性的大小。

ListBox.SelectedIndex的文档声明:

  

对于标准ListBox,您可以使用此属性来确定在ListBox中选择的项的索引。 如果ListBox的SelectionMode属性设置为SelectionMode.MultiSimple或SelectionMode.MultiExtended(表示多选ListBox)并且在列表中选择了多个项,则此属性可以将索引返回到任何选定项。

试试这个

if( listBox1.SelectedItems.Count > 1 )
{
    // multiple items are selected
}

答案 1 :(得分:3)

if (listBox1.SelectedIndices.Count > 1) // I'd use to group all of your multi-selection cases
{
   if (listBox1.SelectedIndices.Contains(1) && listBox1.SelectedIndices.Contains(2))
   {
     label1.Text = "Sometext";
   }
}

请记住,控件是基于0的,因此如果您尝试选择前两个选项,则需要检查0(第1项)和第1项(第2项)。

编辑:已修改以处理评论中列出的要求。注意,可能有更好的方法,甚至可能有一个内置的方法(从未使用过多选列表框)。但是我构建了一个处理函数,所以你不必为每个场景都这样做。

完成工作的功能:

private bool CasesFunction(ListBox lbItem, List<int> validIndices)
{
     for (int index = 0; index < lbItem.Items.Count; index++)
     {
        if (lbItem.SelectedIndices.Contains(index) && !validIndices.Contains(index))
           return false;
     }
     return true;
}

我是如何使用它的:

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
   if (listBox1.SelectedIndices.Count > 1)
      {
         List<int> MyCase = new List<int> { 0, 1 };

         if (CasesFunction(listBox1, MyCase))
         {
            label1.Text = "Sometext";
            return;
         }
         else
            label1.Text = "";

         MyCase = new List<int> { 1, 2 }; // can do other checks

         if (CasesFunction(listBox1, MyCase))
         {
            label1.Text = "Sometext 2";
            return;
         }
         else
            label1.Text = "";
      }
      else
         label1.Text = listBox1.SelectedIndex.ToString();
}