ListBox и Источник данных - препятствуют тому, чтобы первый объект был выбран

Эй. У меня есть следующий код, который заполняет мое поле списка

UsersListBox.DataSource = GrpList;

Однако после того, как поле заполняется, первый объект в списке выбран по умолчанию, и "выбранный индекс изменил" огни события. Как я препятствую тому, чтобы объект был выбран прямо после того, как поле списка было заполнено, или как я препятствую тому, чтобы событие стреляло?

Спасибо

14
задан iBiryukov 4 June 2010 в 15:40
поделиться

3 ответа

Чтобы предотвратить срабатывание события, вот два варианта, которые я использовал в прошлом:

  1. Отмените регистрацию обработчика события при установке DataSource.

    UsersListBox.SelectedIndexChanged -= UsersListBox_SelectedIndexChanged;
    UsersListBox.DataSource = GrpList;
    UsersListBox.SelectedIndex = -1; // Эта необязательная строка удерживает первый элемент от выбора.
    UsersListBox.SelectedIndexChanged += UsersListBox_SelectedIndexChanged;
    
  2. Создайте булевский флаг для игнорирования события.

    private bool ignoreSelectedIndexChanged;
    private void UsersListBox_SelectedIndexChanged(object sender, EventArgs e)
    {
     if (ignoreSelectedIndexChanged) return;
     ...
    }
    ...
    ignoreSelectedIndexChanged = true;
    UsersListBox.DataSource = GrpList;
    UsersListBox.SelectedIndex = -1; // Эта необязательная строка удерживает первый элемент от выбора.
    ignoreSelectedIndexChanged = false;
    
21
ответ дан 1 December 2019 в 13:32
поделиться

Если вы просто хотите очистить выбранное значение, вы можете использовать ClearSelected после установки источника данных. Но если вы не хотите, чтобы событие сработало, вам придется использовать один из методов Джозефа.

-2
ответ дан 1 December 2019 в 13:32
поделиться

Возможно, в DataSourceChanged вы могли бы проверить состояние SelectedIndex, если вам повезет, вы можете просто принудительно установить SelectedIndex = -1.

-4
ответ дан 1 December 2019 в 13:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: