Эй. У меня есть следующий код, который заполняет мое поле списка
UsersListBox.DataSource = GrpList;
Однако после того, как поле заполняется, первый объект в списке выбран по умолчанию, и "выбранный индекс изменил" огни события. Как я препятствую тому, чтобы объект был выбран прямо после того, как поле списка было заполнено, или как я препятствую тому, чтобы событие стреляло?
Спасибо
Чтобы предотвратить срабатывание события, вот два варианта, которые я использовал в прошлом:
Отмените регистрацию обработчика события при установке DataSource.
UsersListBox.SelectedIndexChanged -= UsersListBox_SelectedIndexChanged;
UsersListBox.DataSource = GrpList;
UsersListBox.SelectedIndex = -1; // Эта необязательная строка удерживает первый элемент от выбора.
UsersListBox.SelectedIndexChanged += UsersListBox_SelectedIndexChanged;
Создайте булевский флаг для игнорирования события.
private bool ignoreSelectedIndexChanged;
private void UsersListBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (ignoreSelectedIndexChanged) return;
...
}
...
ignoreSelectedIndexChanged = true;
UsersListBox.DataSource = GrpList;
UsersListBox.SelectedIndex = -1; // Эта необязательная строка удерживает первый элемент от выбора.
ignoreSelectedIndexChanged = false;
Если вы просто хотите очистить выбранное значение, вы можете использовать ClearSelected после установки источника данных. Но если вы не хотите, чтобы событие сработало, вам придется использовать один из методов Джозефа.
Возможно, в DataSourceChanged вы могли бы проверить состояние SelectedIndex, если вам повезет, вы можете просто принудительно установить SelectedIndex = -1.