locked
Mise à jour d'un NumericUpDown dans son valuechanged RRS feed

  • Question

  • Salut à tous.

     

    J'ai un phénomène étrange avec un NumericUpDown.

    Mon but est que après changement, par l'utilisateur, de la valeur de mon NumericUpDown, je puisse corriger, par programmation, cette valeur.

    J'ai donc un événement ValueChanged dans lequel:

    1. je suspend le déclenchement de l'événement ValueChanged pour éviter des appels récursifs.

    2. je change la valeur de mon NumericUpDown

    3. je rétabli le déclenchement de événement ValueChanged.

     

    Voici le code:

    Private Sub NumericUpDown_ValueChanged(...) Handles NumericUpDown.ValueChanged

    RemoveHandler NumericUpDown.ValueChanged, AddressOf NumericUpDown_ValueChanged

    NumericUpDown.Value = 5

    AddHandler NumericUpDown.ValueChanged, AddressOf NumericUpDown_ValueChanged

    End Sub

     

    A l'exécution, si j'utilise les flèches de mon NumericUpDown, la valeur est bien corrigée à 5.

    Par contre, si j'encode une valeur dans le NumericUpDown, la valeur de mon NumericUpDown ne passe pas à 5 comme cela devrait-être.

    Peut-être n'est-ce pas une bonne idée de manipuler les Handler a l'intérieur même du handler en question...

     

    Avez-vous une idée ?

     

    Merci,

    Alain.

     

    mardi 14 octobre 2008 13:01

Réponses

  • Bonjour,

     

    Ce comportement est tout à fait normal.

    Selon la doc officielle de Microsoft :

    http://msdn.microsoft.com/fr-fr/library/system.windows.forms.numericupdown.valuechanged(VS.80).aspx

     

    Pour que l'événement ValueChanged se produise, la propriété Value peut être changée en code, soit en cliquant sur les boutons haut ou bas, soit en tapant une nouvelle valeur lue par le contrôle. La nouvelle valeur est lue lorsque l'utilisateur appuie sur la touche ENTRÉE ou s'éloigne du contrôle.

     

    Dans votre cas, vous pouvez traiter l'événement TextChanged (non recommandé par Microsoft et ne figure donc pas dans l'intellisense).

     

    Cordialement

     

    mardi 14 octobre 2008 20:10
  • Bonjour,

     

    En faisant plusieurs tests, il semblerai que changer la valeur du Value dans l'événement ValueChanged pose problème. (La méthode protégée ValidateEditText() n'est pas appelée).

     

    Une solution de contournement est de forcer la récupération de la value avant de la changer (cela déclenchera l'appel à la méthode protégée) :

     

    Code Snippet

    Dim temp As Decimal = NumericUpDown1.Value

    NumericUpDown1.Value = 5

     

    Cordialement

    mercredi 15 octobre 2008 20:30

Toutes les réponses

  • Bonjour,

     

    Ce comportement est tout à fait normal.

    Selon la doc officielle de Microsoft :

    http://msdn.microsoft.com/fr-fr/library/system.windows.forms.numericupdown.valuechanged(VS.80).aspx

     

    Pour que l'événement ValueChanged se produise, la propriété Value peut être changée en code, soit en cliquant sur les boutons haut ou bas, soit en tapant une nouvelle valeur lue par le contrôle. La nouvelle valeur est lue lorsque l'utilisateur appuie sur la touche ENTRÉE ou s'éloigne du contrôle.

     

    Dans votre cas, vous pouvez traiter l'événement TextChanged (non recommandé par Microsoft et ne figure donc pas dans l'intellisense).

     

    Cordialement

     

    mardi 14 octobre 2008 20:10
  • Je suis dubitatif face à votre réponse...

     

    Lorsque j'encode une nouvelle valeur dans mon NumericUpDown, je fais bien ENTER et l'événement Valuechanged est bien appellé; pourtant la valeur affichée dans le NumericUpDown n'est pas mise à jour suite à l'assignation que je fais dans l'événement.

     

    En guise de confirmation, si je fais un Msgbox("Hello") dans l'événement, ce MsgBox est bien affiché après encodage d'une nouvelle valeur dans le NumericUpDown et appui sur ENTER pourtant, après avoir valider le MsgBox, la valeur de mon NumericUpDown - en tout cas ce qui est affiché - n'est pas mise à jour suite à l'assignation que je fais dans l'événement...

     

    Bonne journée,

    Alain.

     

    mercredi 15 octobre 2008 08:43
  • Bonjour,

     

    En faisant plusieurs tests, il semblerai que changer la valeur du Value dans l'événement ValueChanged pose problème. (La méthode protégée ValidateEditText() n'est pas appelée).

     

    Une solution de contournement est de forcer la récupération de la value avant de la changer (cela déclenchera l'appel à la méthode protégée) :

     

    Code Snippet

    Dim temp As Decimal = NumericUpDown1.Value

    NumericUpDown1.Value = 5

     

    Cordialement

    mercredi 15 octobre 2008 20:30
  • Super, ça marche bien !

    Merci Monsieur Tourreau.

     

    Alain.

     

    jeudi 16 octobre 2008 06:31