C # изменение выбора между двумя списками

Таким образом, следующий код имеет очевидную ошибку: когда пользователь меняет выбор между двумя списками, они оба очищаются. Каков наилучший способ выбрать элемент в listbox2, одновременно отменив выбор элемента в listbox1, наоборот.

    private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
    {
     listbox2.ClearSelected()
    }

    private void listBox2_SelectedIndexChanged(object sender, System.EventArgs e)
    {
     listbox1.ClearSelected()
    }

Я бы хотел заявить, что просто прошу друга, но я не могу понять этого простого ...

Для пояснения, код действительно работает, когда я выбираю элемент из listbox1, после этого listbox2 не выбирается. Проблема в том, что listbox2 изменяется сразу после отмены выбора элемента из listbox1, который был только что нажат.


person ben9020    schedule 06.08.2015    source источник
comment
Unselected означает selected index = -1. Почему вы хотите сначала очистить выделение (дайте нам реальный сценарий, возможно, ваш подход сам по себе неверен)? Вы можете использовать события фокуса, чтобы предотвратить SelectedIndexChanged обработку событий для active ListBox.   -  person Sinatr    schedule 06.08.2015
comment
Код должен работать, если вы не показали нам другие события, изменяющие выделение или фокус.   -  person Graffito    schedule 06.08.2015


Ответы (1)


Измените обе функции следующим образом:

private void listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
  if (bChanging) return;
  bChanging = true;
  listbox2.ClearSelected();
  bChanging = false;
} 

bChanging является членом формы.
Эта или подобная конструкция должна работать.

person Tobias Knauss    schedule 06.08.2015
comment
Спасибо, это сработало отлично. Я знал, что это будет просто - person ben9020; 06.08.2015