Ответ 1
Если вы хотите реагировать только тогда, когда пользователь меняет выделенный элемент в поле со списком, лучше подписаться на SelectionChangeCommitted.
У меня есть форма с ComboBox
, которая предоставляет выпадающий список. В comboBox SelectedIndexChanged event
я запускаю некоторый код, но я не хочу, чтобы этот код запускался при загрузке формы. К сожалению, когда я загружаю форму (до того, как я сделаю выделение в поле со списком), SelectedIndexChanged
огней combobox (я думаю, когда поле со списком databinding
). Есть ли способ избежать такого поведения?
Если вы хотите реагировать только тогда, когда пользователь меняет выделенный элемент в поле со списком, лучше подписаться на SelectionChangeCommitted.
Вы можете просто отвязать событие SelectedIndexChanged
, вызвать функцию fill
и снова связать событие SelectedIndexChanged
. К сожалению, это не работает с сеткой.
Например:
this.cmb.SelectionChanged -= new System.EventHandler(this.cmb_SelectionChanged);
cmb.fill(); //Your function
this.cmb.SelectionChanged += new System.EventHandler(this.cmb_SelectionChanged);
Почему бы не иметь флаг boolean
, который указывает, когда ваша Form
закончила загрузку?
В вашем SelectionChanged
событии проверьте, соответствует ли флаг boolean
true
. Если это true
, тогда обработайте событие, иначе проигнорируйте его.
Обязательно установите свойство DataSource
в своей функции onload()
после назначения свойств ValueMember
и Datamember
.
Это поможет вам решить вашу проблему!
VB
RemoveHandler lbxNomes.SelectedIndexChanged, AddressOf lbxNomes_SelectedIndexChanged
lbxNomes.DataSource = dst
Label1.Text = String.Format("Encontrados {0} Sócios nesta pesquisa", dst.Rows.Count)
Label1.Visible = True
AddHandler lbxNomes.SelectedIndexChanged, AddressOf lbxNomes_SelectedIndexChanged
Он работал у меня таким образом, что следующий код:
private void ddlChapter_SelectionChangeCommitted(object sender, EventArgs e)
{
if (ddlChapter.SelectedValue != null)
{
// Do something here
}
}