Event lost focus appelé en boucle - C#/.NET managed - Programmation
Marsh Posté le 21-02-2011 à 13:44:02
Je dirais au premier coup d'oeil que tu ne précises pas, dans ton Amount_1_LostFocus, que l'événement est consommé ou non selon le test fait dans check_value.
(je ne sais plus s'il y a un e.Handled avec LostFocus, mais c'est dans l'esprit).
Donc il repart pour un tour (en gros).
Autres remarques :
L'intérêt d'avoir une méthode à part (check_value) me paraît aussi assez limité dans ton cas, vu que tu castes explicitement ton sender en TextBox...
Autant tout faire dans Amount_Lost_Focus dans ce cas-là (tu peux appliquer la même méthode à plusieurs TextBox - ou, pour être plus précis mais moins clair, donner la même méthode en paramètre à plusieurs délégués avec la même signature liés à des TextBox différents).
Pas besoin de passer par MessageBoxResult : tu ne fais rien de result...
Un MessageBox.Show("xxx" ) te suffit pour un message d'avertissement.
Cela mis à part, je préfère (est-ce rationnel) utiliser des événements validated ou validating pour ce genre de choses. Mais bon ça dépend de l'usage.
Marsh Posté le 22-02-2011 à 00:53:23
J'ai essayé de rajouter un e.handled = true dans le lostfocus mais ça n'a rien changé.
J'utilisais une méthode à part parce que j'ai plusieurs champs et j'aurais juste à ajouter l'appel à la méthode dans le lostFocus des autres champs quand j'aurais réussi à trouver la cause du problème.
Mais effectivement ce serait sans doute plus propre d'utilisé un delegate.
Je n'ai pas d'évènement validated/validating attaché à ma textbox.
Marsh Posté le 22-02-2011 à 10:50:07
Edit : tu fais du c#, mais quel techno, quel version du framework, en fait ?
LePhasme a écrit : J'ai essayé de rajouter un e.handled = true dans le lostfocus mais ça n'a rien changé. |
Bon :
Pour chaque TextBox
Code :
|
Tu n'as pas besoin d'avoir une méthode Validating_TextBox
et une autre Validating_TextBox1 !
Ensuite
Code :
|
Marsh Posté le 22-02-2011 à 11:12:19
Ah ouais, tu fais du WPF ^^
Bon ben tu n'as pas de validating, c'est sûr.
Mais la logique devrait rester presque la même
Code :
|
Code :
|
Marsh Posté le 22-02-2011 à 11:42:20
Ah, ben testé, ça marche à peu près, mais on perd le focus...
Le mieux serait peut-être donc de faire plutôt un TextBoxChanged
(La même méthode pour toutes tes Textbox, on l'aura compris).
Code :
|
Marsh Posté le 23-02-2011 à 01:26:17
Le problème c'est qu'effacer tout pour une erreur de frappe c'est franchement moyen...
Du coup je vais essayer de passer par des bindings validations vu que c'est une application pour apprendre de toute façon...
Un grand merci pour tes réponses
Marsh Posté le 20-02-2011 à 22:54:03
Je débute en C#, pour vérifier qu'une textbox ne contient une valeur numérique j'utilise le code suivant :
Problème, quand la valeur contient une lettre, l'event Lostfocus de la textbox est appelé en boucle et je ne comprends pas pourquoi vu que je lui donne le focus juste avant...
Message édité par LePhasme le 21-02-2011 à 04:47:02
---------------
Instagram - Mon PVT en Australie.