2009-09-23 6 views
2

Dans Winforms, quelle est la bonne façon d'empêcher un utilisateur de changer la valeur d'un DropDown? Je veux inviter l'utilisateur à dire qu'il y a des changements non sauvegardés. Si l'utilisateur décide de ne pas jeter ces changements, je veux annuler le changement de combobox. auriez vous des idées pour faire ça?WinForms - Empêcher le changement d'un ComboBox - Mode DropDownList

Je pensais avoir déjà vu une option e.Annuler. Mais peut-être pas sur System.Windows.Forms.ComboBox.

MISE À JOUR: Pour plus d'explications, la zone de liste déroulante ne fait pas partie d'un formulaire de saisie de données. Il est utilisé comme une navigation/filtre. L'utilisateur a effectué des modifications sur une grille. Je veux les empêcher de naviguer loin de la grille sans être incité.

+0

e.Canneau ressemble à un événement. Abonnez-vous à un événement par exemple TextChanged et faites e.Cancel = true dans le gestionnaire d'événements. –

Répondre

2

Je ne suis pas sûr que je comprends parfaitement votre question, mais il semble que votre question n'est pas vraiment liée directement à la ComboBox, mais plutôt sur la façon de rétablir une forme à ses valeurs d'origine lorsqu'un l'utilisateur choisit de ne pas enregistrer les modifications qu'il vient de faire. Vraisemblablement, vous avez une méthode dans votre formulaire qui charge les contrôles à partir de valeurs dans une structure de données quelconque (un objet ORM ou un DataRow, peut-être). Le moyen le plus simple de réinitialiser votre formulaire à ses valeurs d'origine (pré-éditées) consiste simplement à rappeler cette méthode avec la structure de données originale (inchangée).

Mise à jour: bien, une façon simple de le faire est de définir la propriété de ComboBox Activé pour false dès qu'ils changent quoi que ce soit sur la forme, puis le mettre à true à nouveau dès qu'ils sauvegarder ou d'annuler leur changements.

+0

Voir la mise à jour à la question. – BuddyJoe

+0

+1 cela peut fonctionner. – BuddyJoe

1

Lors d'un événement de changement de liste, sauvegardez l'ancienne valeur et donnez l'invite à l'utilisateur. S'ils choisissent de continuer alors ne faites rien. S'ils choisissent d'annuler et de ne pas perdre leurs modifications, réglez l'élément sélectionné sur l'ancienne valeur.

1

Vous pouvez utiliser l'événement Validating de la zone de liste déroulante, à savoir CancelEventHandler.

MSDN: Control.Validating event

+0

Voir la mise à jour. L'événement de validation se déclenche-t-il uniquement lorsque vous essayez de quitter le contrôle? – BuddyJoe

+0

Ouais - il se déclenche quand le contrôle perd le focus. –

Questions connexes