Étape 5 : ajouter des gestionnaires d'événements Enter pour les contrôles NumericUpDownStep 5: Add Enter Event Handlers for the NumericUpDown Controls

Dans la cinquième partie de ce didacticiel, vous allez ajouter des gestionnaires d'événements Enter pour simplifier légèrement la saisie des réponses aux problèmes du questionnaire.In the fifth part of this tutorial, you'll add Enter event handlers to make entering answers for quiz problems a little easier. Ce code sélectionne et efface la valeur actuelle de chaque contrôle NumericUpDown dès que la personne répondant au questionnaire le choisit et commence à entrer une autre valeur.This code will select and clear the current value in each NumericUpDown control as soon as the quiz taker chooses it and starts to enter a different value.

Note

Cette rubrique fait partie d'une série de didacticiels sur les concepts de codage de base.This topic is part of a tutorial series about basic coding concepts. Pour obtenir une vue d’ensemble du didacticiel, consultez Didacticiel 2 : créer un questionnaire mathématique chronométré.For an overview of the tutorial, see Tutorial 2: Create a Timed Math Quiz.

Pour vérifier le comportement par défautTo verify the default behavior

  1. Exécutez votre programme et démarrez le questionnaire.Run your program, and start the quiz.

    Dans le contrôle NumericUpDown du problème d’addition, le curseur clignote en regard de 0 (zéro).In the NumericUpDown control for the addition problem, the cursor flashes next to 0 (zero).

  2. Entrez 3 et notez que le contrôle affiche 30.Enter 3, and note that the control shows 30.

  3. Entrez 5 et notez que 350 apparaît mais prend la valeur 100 après une seconde.Enter 5, and note that 350 appears but changes to 100 after a second.

    Avant de résoudre ce problème, réfléchissez à ses causes.Before you fix this problem, think about what's happening. Pourquoi 0 n’a-t-il pas disparu quand vous avez entré 3 et pourquoi 350 est-il devenu 100 mais pas immédiatement ?Consider why the 0 didn't disappear when you entered 3 and why 350 changed to 100 but not immediately.

    Ce comportement peut sembler étrange, mais il est cohérent en tenant compte de la logique du code.This behavior may seem odd, but it makes sense given the logic of the code. Quand vous choisissez le bouton Démarrer, la valeur False est affectée à sa propriété Enabled, si bien que le bouton apparaît grisé et ne peut pas être sélectionné.When you choose the Start button, its Enabled property is set to False, and the button appears dimmed and is unavailable. Votre programme modifie la sélection actuelle (focus) du contrôle dont la valeur TabIndex suivante est la plus faible, ce qui correspond au contrôle NumericUpDown pour le problème d'addition.Your program changes the current selection (focus) to the control that has the next lowest TabIndex value, which is the NumericUpDown control for the addition problem. Lorsque vous utilisez la touche de tabulation pour accéder à un contrôle NumericUpDown, le curseur est automatiquement positionné au début du contrôle, et par conséquent, les nombres que vous entrez apparaissent à partir de la gauche et non de la droite.When you use the Tab key to go to a NumericUpDown control, the cursor is automatically positioned at the start of the control, which is why the numbers that you enter appear from the left side and not the right side. Quand vous spécifiez un nombre qui est plus élevé que la valeur de la propriété MaximumValue, définie à 100, le nombre que vous entrez est remplacé par la valeur de cette propriété.When you specify a number that's higher than the value of the MaximumValue property, which is set to 100, the number that you enter is replaced with the value of that property.

Pour ajouter un gestionnaire d'événements Enter pour un contrôle NumericUpDownTo add an Enter event handler for a NumericUpDown control

  1. Sélectionnez le premier contrôle NumericUpDown (nommé « somme ») du formulaire puis, dans la boîte de dialogue Propriétés, sélectionnez l’icône Événements de la barre d’outils.Choose the first NumericUpDown control (named "sum") on the form, and then, in the Properties dialog box, choose the Events icon on the toolbar.

    L’onglet Événements de la boîte de dialogue Propriétés affiche tous les événements auxquels vous pouvez répondre (que vous pouvez gérer) pour l’élément que vous sélectionnez sur le formulaire.The Events tab in the Properties dialog box displays all of the events that you can respond to (handle) for the item that you choose on the form. Comme vous avez choisi le contrôle NumericUpDown, tous les événements répertoriés s'y appliquent.Because you chose the NumericUpDown control, all of the events listed pertain to it.

  2. Sélectionnez l’événement Enter, entrez answer_Enteranswer_Enter, puis choisissez la touche Entrée.Choose the Enter event, enter answer_Enter, and then choose the Enter key.

    Boîte de dialogue PropriétésProperties dialog box
    Propriétés, boîte de dialogueProperties dialog box

    Vous venez d’ajouter un gestionnaire d’événements Enter pour le contrôle NumericUpDown de somme et vous avez nommé le gestionnaire answer_Enter.You've just added an Enter event handler for the sum NumericUpDown control, and you've named the handler answer_Enter.

  3. Dans la méthode du gestionnaire d’événements answer_Enter, ajoutez le code suivant.In the method for the answer_Enter event handler, add the following code.

    ''' <summary> 
    ''' Modify the behavior of the NumericUpDown control
    ''' to make it easier to enter numeric values for
    ''' the quiz.
    ''' </summary> 
    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);
        }
    }
    

    Ce code peut sembler complexe, mais vous le comprendrez si vous l'examinez de manière détaillée.This code may look complex, but you can understand it if you look at it step by step. Commencez par analyser le haut de la méthode : object sender en C# ou sender As System.Object en Visual Basic.First, look at the top of the method: object sender in C# or sender As System.Object in Visual Basic. Ce paramètre désigne l'objet dont l'événement se déclenche, appelé l'expéditeur.This parameter refers to the object whose event is firing, which is known as the sender. Dans ce cas, l'objet expéditeur est le contrôle NumericUpDown.In this case, the sender object is the NumericUpDown control. Ainsi, dans la première ligne de la méthode, vous indiquez que l'expéditeur n'est pas seulement un objet générique, mais plus précisément un contrôle NumericUpDown.So, in the first line of the method, you specify that the sender isn't just any generic object but specifically a NumericUpDown control. (Chaque contrôle NumericUpDown est un objet, mais chaque objet n'est pas un contrôle NumericUpDown.) Le contrôle NumericUpDown est nommé answerBox dans cette méthode, car il sera utilisé pour tous les contrôles NumericUpDown du formulaire et pas seulement pour le contrôle NumericUpDown de somme.(Every NumericUpDown control is an object, but not every object is a NumericUpDown control.) The NumericUpDown control is named answerBox in this method, because it will be used for all of the NumericUpDown controls on the form, not just the sum NumericUpDown control. Comme vous déclarez la variable answerBox dans cette méthode, sa portée s'applique uniquement à cette méthode.Because you declare the answerBox variable in this method, its scope applies only to this method. En d'autres termes, la variable peut être utilisée uniquement dans cette méthode.In other words, the variable can be used only within this method.

    La ligne suivante vérifie si l’objet answerBox a été converti (cast) correctement en contrôle NumericUpDown.The next line verifies whether answerBox was successfully converted (cast) from an object to a NumericUpDown control. Si la conversion était infructueuse, la variable aurait la valeur null (C#) ou Nothing (Visual Basic).If the conversion was unsuccessful, the variable would have a value of null (C#) or Nothing (Visual Basic). La troisième ligne obtient la longueur de la réponse qui apparaît dans le contrôle NumericUpDown et la quatrième ligne sélectionne la valeur actuelle dans le contrôle en fonction de cette longueur.The third line gets the length of the answer that appears in the NumericUpDown control, and the fourth line selects the current value in the control based on this length. Maintenant, lorsque la personne répondant au questionnaire choisit le contrôle, Visual Studio déclenche cet événement, ce qui entraîne la sélection de la réponse actuelle.Now, when the quiz taker chooses the control, Visual Studio fires this event, which causes the current answer to be selected. Dès que la personne interrogée commence à entrer une réponse différente, la réponse précédente est effacée et remplacée par la nouvelle réponse.As soon as the quiz taker starts to enter a different answer, the previous answer is cleared and replaced with the new answer.

  4. Dans le Concepteur Windows Forms, choisissez le contrôle NumericUpDown de différence.In Windows Forms Designer, choose the difference NumericUpDown control.

  5. Dans la page Événements de la boîte de dialogue Propriétés, faites défiler l’écran jusqu’à l’événement Enter, choisissez la flèche déroulante à la fin de la ligne, puis choisissez le gestionnaire d’événements answer_Enter que vous venez d’ajouter.In the Events page of the Properties dialog box, scroll down to the Enter event, choose the drop-down arrow at the end of the row, and then choose the answer_Enter event handler that you just added.

  6. Répétez l'étape précédente pour les contrôles NumericUpDown de produit et de quotient.Repeat the previous step for the product and quotient NumericUpDown controls.

  7. Enregistrez votre programme, puis exécutez-le.Save your program, and then run it.

    Quand vous choisissez un contrôle NumericUpDown, la valeur existante est automatiquement activée puis désactivée lorsque vous commencez à entrer une autre valeur.When you choose a NumericUpDown control, the existing value is automatically selected and then cleared when you start to enter a different value.

Pour continuer ou examinerTo continue or review