2015-09-02 2 views
2

У меня есть ListBox в winforms Application, теперь бизнес-логика требует, чтобы я запускал одну функцию, если элемент в окне списка выбран и запускает другую, если элемент в поле списка не выбран.MultiSelect ListBox Select And DeSelect Event

Но, как я его вижу, ни одно из событий, перечисленных в VS, не дает этой силы исполнения. Я вижу события как

SelectedIndexChanged(object sender, EventArgs e) 

и

SelectedValueChanged(object sender, EventArgs e) 

Но оба эти пожары событий, если есть изменения в выборе ListBox. Но он не указывает, был ли элемент выбран или отменен, что вызвало событие.

Любое предложение об этом было бы очень полезно.

Я даже нашел ссылку на MSDN

https://msdn.microsoft.com/en-us/library/system.windows.controls.listboxitem.unselected%28v=vs.110%29.aspx

Но я не знаю, как применить то же самое в этой ситуации.

+1

Один из способов - сохранить список выбранных предметов. Каждый раз, когда один из этих событий срабатывает, проверяйте текущий элемент по списку. Если он не существует, вы узнаете, что он был выбран и может добавить его в список, аналогично, если он существует в списке, вы узнаете, что он был отменен и может удалить его. – Equalsk

+0

Да, я также подумал о чем-то подобном, в котором я должен был бы оставить примечание выбранного количества предметов в глобальной переменной в моей форме «Класс» и «Соответственно». Но это было бы утомительно для простого требования? –

+1

Ссылка, которую вы разместили для 'WPF', не относится к' winforms'. – Loathing

ответ

0

Проводка утомительного решения. Может помочь some1 в будущем для копирования пасты.

public static int ListCount; 

     private void listBoxPackService_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      int CurrCount; 

      ListBox.SelectedObjectCollection col = listBoxPackService.SelectedItems; 
      CurrCount = col.Count; 

      if (CurrCount > ListCount) 
      { 
       //Item Selected 

      } 
      else 
      { 
       //Item DeSelected 

       if(CurrCount == 0) 
       { 
        //All Items Were Deselected 
       } 

      } 

      ListCount = CurrCount; 

     } 

На нагрузке ListBox

ListCount = 0 

переименовывать управление в соответствии с вашими требованиями.

Я по-прежнему открыт для лучшего решения :)