Mon application C# a un comboBox
avec un événement SelectedIndexChanged
. Habituellement, je veux que cet événement se déclenche, mais parfois j'ai besoin de l'événement pour ne pas tirer. Mon comboBox
est une liste de fichiers MRU. Si un fichier de la liste est introuvable, l'élément est supprimé du comboBox
et le comboBox
SelectedIndex
est défini sur zéro. Toutefois, la définition de comboBox
SelectedIndex
à 0 entraîne l'exécution de l'événement SelectedIndexChanged
, ce qui dans ce cas est problématique car il entraîne l'exécution d'un code UIF dans le gestionnaire d'événements. Existe-t-il un moyen gracieux de désactiver/activer les événements pour les contrôles de formulaire C#? Merci.Modification de ComboBox SelectedIndex sans déclencher d'événement en C#
Répondre
Démarrer la méthode eventhandler avec
ComboBox combo = sender as ComboBox;
if (combo.SelectedIndex == 0)
{
return;
}
Si vous êtes problème est avec un autre eventhandler vous pouvez supprimer l'enregistrement des événements de la première eventhandler.
combo.SelectedIndexChanged -= EventHandler<SelectedIndexChangedEventArgs> SomeEventHandler;
combo.SelectedIndex = 0;
combo.SelectedIndexChanged += EventHandler<SelectedIndexChangedEventArgs> SomeEventHandler;
un (assez laid) façon serait de mettre un drapeau dans le code qui supprime l'entrée, puis vérifiez que dans le gestionnaire SelectedIndexChanged
:
if (!deletedEntry)
{
// Do stuff
}
deletedEntry = false;
Une meilleure façon peut-être de supprimer votre SelectedIndexChanged
gestionnaire d'événements au début de la méthode de suppression et le rétablir à la fin. De cette façon, le code ne saura pas que l'index a changé.
J'ai rencontré cela plusieurs fois au cours des années. Ma solution est d'avoir une variable de niveau classe appelée _noise et si je sais que je suis sur le point de changer l'index de combo ou tout autre contrôle similaire qui se déclenche quand l'index sélectionné change, je fais ce qui suit dans le code.
private bool _noise;
Voici le code pour le gestionnaire d'événements de contrôle
private void cbTest_SelectedIndexChange(object sender, EventArgs e)
{
if (_noise) return;
// process the events code
...
}
Puis, quand je sais que je vais changer l'index, je fais ce qui suit:
_noise = true; // cause the handler to ignore the noise...
cbTest.Index = value;
_noise = false; // let the event process again
Je suis surpris qu'il n'y ait pas de meilleure façon de faire ça, mais c'est comme ça que je le fais. J'utilise en fait le champ Tag
de la plupart des contrôles, donc je n'ai pas besoin de sous-classer le contrôle. Et j'utilise true
/null
comme valeurs, puisque null
est la valeur par défaut.
Bien sûr, si vous utilisez réellement Tag
, vous aurez besoin de le faire différemment ...
dans le gestionnaire:
private void control_Event(object sender, EventArgs e)
{
if (control.Tag != null) return;
// process the events code
...
}
Dans le code principal
try
{
control.Tag = true;
// set the control property
control.Value = xxx;
or
control.Index = xxx;
or
control.Checked = xxx;
...
}
finally
{
control.Tag = null;
}
- 1. combobox changez en arrière SelectedIndex C#
- 2. WPF Combobox SelectedIndex
- 3. WPF ComboBoxItem Modification d'arrière-plan lorsque ComboBox SelectedIndex est -1
- 4. Modification de SelectedIndex de 1 DropDown Modification de SelectedIndex d'autres DropDownLists
- 5. Déclencher l'événement onChange après le changement de l'élément selectedIndex?
- 6. ComboBox SelectedIndex ne peut pas être réinitialisé
- 7. selecteditems et selectedindex C#
- 8. WPF ComboBox SelectedIndex change lorsque IsEnabled est défini sur false
- 9. C# ComboBox Filtre de liaison de données
- 10. Modification du format d'un élément ComboBox
- 11. C# Messagebox Avec ComboBox
- 12. Modification du comportement de ComboBox modifiable
- 13. Comment déclencher une modification dans JQuery?
- 14. Liaison de la propriété MenuItem (IsEnabled) à la propriété combobox (SelectedIndex) dans le même contrôle
- 15. ComboBox Remplissage avec LINQ C#
- 16. mémoire modification en C++
- 17. Modification des éléments ComboBox Scala Swing
- 18. C# Winforms GridView Colonne ComboBox SelectedItemIndex
- 19. Gridview SelectedIndex set de valeurs
- 20. Déclencher l'événement de modification d'une zone de texte dans jQuery
- 21. Une meilleure façon de faire SelectedIndex correspondre à l'élément sélectionné dans Flex ComboBox
- 22. Combobox selectedindex L'événement modifié est invoqué même si l'index n'est pas modifié
- 23. vb.net combobox style différent à C# combobox
- 24. Process.start en C#, ne pas déclencher
- 25. Modification des en-têtes JPEG en C#
- 26. jquery: Comment déclencher click() sans modifier l'état de l'élément?
- 27. WPF: ComboBox sans bouton de liste déroulante
- 28. Modification des chaînes en C
- 29. Maître-détail via ComboBox en C#?
- 30. un Peupler ComboBox en utilisant C#