Событие Comobox SelectedValueChanged
У меня есть простой вопрос, может быть, кто-то спросил его передо мной, но я не мог его найти. Скажем, у меня есть данные, которые содержат некоторые данные из базы данных, и я хочу привязать их к combobox. Я использую стандартный код, подобный этому
comboBox1.BeginUpdate( );
comboBox1.ValueMember = "id";
comboBox1.DisplayMember = "name";
comboBox1.DataSource = dt;
comboBox1.EndUpdate( );
Проблема заключается в том, что это событие связано с событием SelectedValueChanged
. Проблема заключается в том, что перекомпоновка несколько раз, когда значения outher меняются, и каждый раз, когда я должен делать что-то подобное
comboBox1.SelectedIndexChanged -= new System.EventHandler( this.comboBox1_SelectedValueChanged );
В моем вопросе есть более умный способ пропустить событие, когда я получаю привязку данных не от ввода пользователя. Проблема в том, что я хочу сделать это как-то, как глобально в моем элементе управления, который наследует combobox, и не делать это каждый раз в каждом из
С наилучшими пожеланиями,
Иордан
Ответы
Ответ 1
Попробуйте использовать событие SelectionChangeCommitted.
Из документации MSDN:
SelectionChangeCommitted возникает только тогда, когда пользователь меняет выбор поля со списком. Не используйте SelectedIndexChanged или SelectedValueChanged, чтобы фиксировать пользовательские изменения, поскольку эти события также повышается, когда выбор изменяется программно.
Ответ 2
Я всегда делал это, как сказал крекер. Я создаю глобальную логическую переменную с именем _isLoading и устанавливаю ее в true при загрузке моего combobox, а затем обратно к false, когда это будет сделано. Затем в обработчике событий первая строка
if(_isLoading) return;