如何取消选择列表框项?

时间:2015-11-11 14:10:22

标签: c# winforms

我有一个ListBox,当选择一个项目时,它也会显示在标签中。但是,当我想删除所选项目时,程序会中断并显示NullReferenceException

我的代码:

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    label1.Text = "Your Selected: " + listBox1.SelectedItem.ToString();
}

private void button2_Click(object sender, EventArgs e)
{
    label1.Text = "";
    listBox1.Items.RemoveAt(listBox1.SelectedIndex);
}

2 个答案:

答案 0 :(得分:3)

在列表框中可能会显示没有选定项目,因此您必须检查:

   private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
   {
       label1.Text = null == listBox1.SelectedItem 
         ? ""
         : "Your Selected: " + listBox1.SelectedItem.ToString();
   }

   private void button2_Click(object sender, EventArgs e) {
     // Looks redundant, listBox1_SelectedIndexChanged will do 
     //label1.Text = "";    

     // Deselect item, but not remove it
     if (listBox1.SelectedIndex >= 0)
       listBox1.SelectedIndex = -1;

     // In case you want to remove the item (not deselect) - comment out the code below
     // if (listBox1.SelectedIndex >= 0)
     //   listBox1.Items.RemoveAt(listBox1.SelectedIndex);
   }

修改:对于计算列表框项目,当前列表框实现中存在无事件。所以你必须手动完成:

  if (listBox1.SelectedIndex >= 0) {
    listBox1.Items.RemoveAt(listBox1.SelectedIndex);

    lbItemsCount.Text = listBox1.Items.Count.ToString();
  }

答案 1 :(得分:0)

另一种方法是使用列表框的click事件,如果我们不想双击一个列表框项以取消选择另一个列表项。 例如:

private void ListBox_Right_Click(strong textobject sender, EventArgs e)
{
Btn_Left.Enabled = ListBox_Right.SelectedIndex >= 0;
ListBox_Left.ClearSelected(); // to clear the list selection/highlight
Btn_Right.Enabled = false; // for my specification
}
}



private void ListBox_Left_Click(object sender, EventArgs e)
{

Btn_Right.Enabled = ListBox_Left.SelectedIndex >= 0;
ListBox_Right.ClearSelected();  //to clear the list selection/highlight

Btn_Left.Enabled = false;// for my specification
}