web-dev-qa-db-fra.com

Empêcher l'événement selectedIndexChanged de comboBox de se déclencher lors du chargement du formulaire

J'ai un formulaire avec un ComboBox qui fournit une liste déroulante. Sur la comboBox SelectedIndexChanged event, j'exécute du code, mais je ne veux pas que ce code s'exécute lorsque le formulaire se charge. Malheureusement, lorsque je charge le formulaire (avant de faire une sélection dans la combobox), SelectedIndexChanged de la combobox se déclenche (je pense que lorsque la combobox est databinding). Existe-t-il un moyen d'éviter un tel comportement?

71
StackTrace

Si vous souhaitez réagir uniquement lorsque l'utilisateur modifie l'élément sélectionné dans la zone de liste déroulante, il est préférable de s'abonner à SelectionChangeCommitted .

137
arbiter

Vous pouvez simplement dissocier l'événement SelectedIndexChanged, appeler votre fonction fill et lier à nouveau l'événement SelectedIndexChanged. Malheureusement, cela ne fonctionne pas avec une grille.

Par exemple:

this.cmb.SelectionChanged -= new System.EventHandler(this.cmb_SelectionChanged);
cmb.fill(); //Your function
this.cmb.SelectionChanged += new System.EventHandler(this.cmb_SelectionChanged);
11
Shantanu Gupta

Veillez à définir la propriété DataSource dans votre fonction onload() après avoir affecté les propriétés ValueMember et Datamember.

Cela vous aidera à résoudre votre problème!

6
Ranjith

Pourquoi ne pas avoir un indicateur boolean qui indique quand votre Form a fini de se charger?

Dans votre événement SelectionChanged, vérifiez si l'indicateur boolean est true. S'il s'agit de true, gérez l'événement, sinon ignorez-le.

5
user195488

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
1
Paulos02