Partager via


Étape 5 : ajouter des gestionnaires d'événements Enter pour les contrôles NumericUpDown

Vous aurez éventuellement remarqué qu'un problème survient lorsque vous tapez des nombres dans le contrôle NumericUpDown.Pour le résoudre, ajoutez un gestionnaire d'événements Enter.

Pour analyser le comportement du contrôle NumericUpDown

  1. Exécutez votre programme et démarrez le jeu.Un curseur doit clignoter dans le contrôle de somme NumericUpDown (sum) en regard de 0 (zéro).

  2. Si vous tapez 3, le chiffre 30 s'affiche.Si vous tapez 5, le chiffre 350 s'affiche, mais après une seconde, ce chiffre devient 100.

    Avant de résoudre ce problème, réfléchissez à ses causes.Demandez-vous pourquoi le 0 n'a pas disparu lorsque vous avez tapé 3, pourquoi 350 est devenu 100 et pourquoi il s'est écoulé un laps de temps avant que le chiffre ne change.

    [!REMARQUE]

    Aussi étrange qu'il soit, ce comportement a une explication.Lorsque vous cliquez sur le bouton Démarrer, la valeur False est affectée à la propriété Enabled du bouton, si bien que le bouton apparaît grisé et ne peut pas être sélectionné.Votre programme recherche le contrôle ayant la valeur TabIndex suivante la plus basse (le contrôle de somme NumericUpDown) et fait passer le focus à ce contrôle.Lorsque vous utilisez la touche TAB pour accéder à un contrôle NumericUpDown, il positionne automatiquement le curseur au début du contrôle, et par conséquent, les nombres que vous tapez sont entrés à partir de la gauche et non de la droite.Lorsque vous entrez un nombre supérieur à la propriété MaximumValue (qui a la valeur 100), il remplace le nombre entré par la valeur maximale.

Pour ajouter un gestionnaire d'événements Enter pour le contrôle NumericUpDown

  1. Pour éviter ce comportement étrange et faciliter l'utilisation de votre programme, ajoutez un gestionnaire d'événements pour chaque événement Enter du contrôle NumericUpDown.Utilisez la page Événements dans la boîte de dialogue Propriétés afin d'ajouter un gestionnaire d'événements Enter pour le contrôle de somme NumericUpDown, appelé answer_Enter.

    Boîte de dialogue Propriétés

    Boîte de dialogue Propriétés

    Le code doit se présenter comme suit.

    Private Sub answer_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles sum.Enter
    
        ' Select the whole answer in the NumericUpDown control.
        Dim answerBox = TryCast(sender, NumericUpDown)
    
        If answerBox IsNot Nothing Then
            Dim lengthOfAnswer = answerBox.Value.ToString().Length
            answerBox.Select(0, lengthOfAnswer)
        End If
    
    End Sub
    
    private void answer_Enter(object sender, EventArgs e)
    {
        // Select the whole answer in the NumericUpDown control.
        NumericUpDown answerBox = sender as NumericUpDown;
    
        if (answerBox != null)
        {
            int lengthOfAnswer = answerBox.Value.ToString().Length;
            answerBox.Select(0, lengthOfAnswer);
        }
    }
    

    Complexe en apparence, il est plus facile à comprendre si vous l'examinez pas à pas.Commencez par analyser le haut de la méthode : object sender en C# ou sender As System.Object en Visual Basic.À l'intérieur de votre méthode, chaque fois que vous utilisez sender, elle fait référence au contrôle NumericUpDown dont l'événement Enter se déclenche.Ainsi, dans la première ligne de la méthode, vous indiquez qu'il ne s'agit pas uniquement d'un objet, mais plus précisément d'un contrôle NumericUpDown.(Chaque contrôle NumericUpDown est un objet, mais chaque objet n'est pas un contrôle NumericUpDown.) La ligne suivante vérifie si l'objet answerBox a été converti (transtypage) avec succès en contrôle NumericUpDown.En cas d'échec, il aurait la valeur null (C#) ou Nothing (Visual Basic).La troisième ligne identifie la longueur de la réponse qui est actuellement affichée dans le contrôle NumericUpDown.La quatrième ligne indique au contrôle NumericUpDown de sélectionner la réponse.Maintenant, lorsque l'utilisateur navigue dans le contrôle, ce dernier déclenche cet événement pour sélectionner la réponse.Dès que l'utilisateur commence à taper, la réponse précédente est effacée et remplacée par la nouvelle réponse.

  2. Une fois le gestionnaire d'événements mis en place, ouvrez le Concepteur Windows Forms et sélectionnez le contrôle de différence NumericUpDown.Ouvrez la page Événements dans la boîte de dialogue Propriétés, faites défiler jusqu'à l'événement Enter et sélectionnez le gestionnaire d'événements que vous venez d'ajouter.

  3. Ensuite, effectuez la même opération pour les contrôles de quotient et de produit NumericUpDown.

  4. Enregistrez et exécutez votre programme.Le comportement étrange ne doit plus se produire.

Pour continuer ou examiner