我认为很明显我正在尝试做什么,但如果你不明白,请问。
if (listBox1.SelectedIndex == 1 && 2)
{
label1.Text = "Sometext";
}
答案 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();
}