Question

J'ai une zone de texte liée à la propriété d'un objet (en fait plusieurs zones de texte) sur un formulaire. Ceci est un éditeur pour un objet. Lorsque je modifie des objets et modifie des valeurs dans l'une des zones de texte, je ne peux pas quitter la zone de texte (ni par tabulation ni en cliquant sur une autre zone de texte). Toutefois, ce n’est pas toujours le cas: lors de la modification d’autres objets (du même type), cela fonctionne correctement.

Voici un bout de code:

txtValue.DataBindings.Add("Text", _SourceObject, "PlannedValue", True, DataSourceUpdateMode.OnPropertyChanged, Nothing, "c")
txtEstPlacements.DataBindings.Add("Text", _SourceObject, "EstimatedPlacementCount")
txtReference.DataBindings.Add("Text", _SourceObject, "Reference")

Des suggestions?

Était-ce utile?

La solution

Cela ressemble à un problème de validation des données. Vérifiez si les propriétés de CausesValidation des contrôles du formulaire sont définies sur true ou sur false.

Vérifiez également la propriété AutoValidate du formulaire. Il est probablement défini sur EnablePreventFocusChange (valeur par défaut).

Il se peut également que la valeur fournie dans la zone de texte ne puisse pas être convertie en type de la propriété à laquelle elle est liée sur l'objet de données source. Je crois que la classe Convert est utilisée pour cela (bien que je puisse me tromper ici).

Vous pouvez consulter cet article sur MSDN qui couvre Winforms validation en détail.

Autres conseils

Si votre formulaire utilise AutoValidate == EnablePreventFocusChange, le focus reste bloqué dans les champs où la validation échoue.

Notez que la validation est considérée comme ayant échoué s'il existe une exception lors de l'écriture de la valeur dans l'objet.

Essayez de définir un point d'arrêt au point d'entrée du séparateur de la propriété liée au contrôle où le curseur se coince. Ensuite, une seule étape pour voir si une exception est levée.

Si le point d'arrêt ne se déclenche jamais, il est possible que l'exception se produise dans le cadre de liaison de données.

Contrairement à une idée répandue, la structure de liaison de données enregistre les erreurs et d’autres informations utiles. Elle utilise pour cela le support de l’espace de noms System.Diagnostics. J'oublie les détails, mais ils sont sur MSDN - vous devriez pouvoir afficher les diagnostics dans la fenêtre de messages de Visual Studio pendant l'exécution de votre application. Très utile pour résoudre les problèmes liés à la liaison de données.

Afin de corriger l’échec de la validation, dû à l’incapacité de la liaison de données de définir DBNull.Value dans textbox.text, vous pouvez ajouter la ligne suivante dans la section Form_Load:

TextBox1.DataBindings["Text"].NullValue = string.Empty;

pour chaque zone de texte pour laquelle vous souhaitez permettre à une valeur vide d'être validée correctement.

Voir plus de détails sur Microsoft Connect .

et sur:

Impossible d'échapper à la zone de texte vide

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top