简体   繁体   中英

How to deselect item of listbox?

I have a ListBox that when an item is selected, it is shown in a label as well. However, when I want to remove the selected item, program breaks and shows a NullReferenceException .

My code:

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);
}

It may appear, that there's no selected item in the listbox, so you have to check for that:

   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);
   }

Edit : as for counting listbox items, there's no event fo this in the current listbox implementation. So you have to do it manually:

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

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

Another way is to use click event of the list box , if we do not want to double click the one list box item for the deselection of another list items. ex:

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
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM