Partager via


Étape 5 : ajouter des références de contrôles Label

Le programme doit effectuer le suivi des contrôles Label sur lesquels le joueur a cliqué.Une fois que le joueur a cliqué sur le premier contrôle Label, le programme affiche son icône.Une fois que le joueur a cliqué sur le deuxième contrôle Label, le programme doit afficher brièvement les deux icônes, puis les masquer à nouveau.Votre programme vérifiera sur quel contrôle Label le joueur a cliqué en premier et en deuxième à l'aide de variables de référence.

Pour ajouter des références aux contrôles Label

  1. Pour ajouter des références aux contrôles Label dans votre formulaire, utilisez le code suivant.

    Public Class Form1
    
        ' firstClicked points to the first Label control 
        ' that the player clicks, but it will be Nothing 
        ' if the player hasn't clicked a label yet
        Private firstClicked As Label = Nothing
    
        ' secondClicked points to the second Label control 
        ' that the player clicks
        Private secondClicked As Label = Nothing
    
    public partial class Form1 : Form
    {
        // firstClicked points to the first Label control 
        // that the player clicks, but it will be null 
        // if the player hasn't clicked a label yet
        Label firstClicked = null;
    
        // secondClicked points to the second Label control 
        // that the player clicks
        Label secondClicked = null;
    

    [!REMARQUE]

    Les variables de référence sont identiques aux instructions que vous avez utilisées pour ajouter des objets (comme les objets Timer, List et Random ) à votre formulaire.Toutefois, ces instructions n'entraînent pas l'affichage de deux contrôles Label supplémentaires dans le formulaire étant donné qu'il n'existe aucun new dans l'une ou l'autre des deux instructions.Sans new, aucun objet n'est créé.C'est la raison pour laquelle firstClicked et secondClicked sont appelées « variables de référence » : elles sont uniquement chargées de suivre (ou de référencer) les objets Label.

    [!REMARQUE]

    Lorsqu'une variable n'effectue pas le suivi d'un objet, elle a une valeur spéciale : null en Visual C# et Nothing en Visual Basic.Au démarrage du programme, firstClicked et secondClicked ont donc la valeur null ou Nothing, ce qui signifie que les variables n'effectuent aucun suivi.

  2. Modifiez votre gestionnaire d'événements Click pour qu'il utilise la nouvelle variable de référence firstClicked.Supprimez la dernière instruction dans la méthode du gestionnaire d'événements label_Click() (clickedLabel.ForeColor = Color.Black;) et remplacez-la par l'instruction if suivante.(Veillez à bien inclure le commentaire, et l'instruction complète d' if .)

    ''' <summary>
    ''' Every label's Click event is handled by this event handler
    ''' </summary>
    ''' <param name="sender">The label that was clicked</param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub label_Click(ByVal sender As System.Object, 
                            ByVal e As System.EventArgs) Handles Label9.Click, 
        Label8.Click, Label7.Click, Label6.Click, Label5.Click, Label4.Click, 
        Label3.Click, Label2.Click, Label16.Click, Label15.Click, Label14.Click, 
        Label13.Click, Label12.Click, Label11.Click, Label10.Click, Label1.Click
    
        Dim clickedLabel = TryCast(sender, Label)
    
        If clickedLabel IsNot Nothing Then
    
            ' If the clicked label is black, the player clicked
            ' an icon that's already been revealed --
            ' ignore the click
            If clickedLabel.ForeColor = Color.Black Then Exit Sub
    
            ' If firstClicked is Nothing, this is the first icon 
            ' in the pair that the player clicked, 
            ' so set firstClicked to the label that the player
            ' clicked, change its color to black, and return
            If firstClicked Is Nothing Then
                firstClicked = clickedLabel
                firstClicked.ForeColor = Color.Black
                Exit Sub
            End If
        End If
    
    End Sub
    
    /// <summary>
    /// Every label's Click event is handled by this event handler
    /// </summary>
    /// <param name="sender">The label that was clicked</param>
    /// <param name="e"></param>
    private void label_Click(object sender, EventArgs e)
    {
        Label clickedLabel = sender as Label;
    
        if (clickedLabel != null)
        {
            // If the clicked label is black, the player clicked
            // an icon that's already been revealed --
            // ignore the click
            if (clickedLabel.ForeColor == Color.Black)
                return;
    
            // If firstClicked is null, this is the first icon 
            // in the pair that the player clicked,
            // so set firstClicked to the label that the player 
            // clicked, change its color to black, and return
            if (firstClicked == null)
            {
                firstClicked = clickedLabel;
                firstClicked.ForeColor = Color.Black;
    
                return;
            }
        }
    }
    
  3. Enregistrez et exécutez votre programme.Cliquez sur l'un des contrôles Label, et son icône s'affiche.

  4. Cliquez sur le contrôle Label suivant, et notez que rien ne se passe.Le programme effectue déjà le suivi du premier contrôle Label sur lequel le joueur a cliqué, et donc firstClicked n'est pas égal à null en Visual C# ou Nothing en Visual Basic.Lorsque votre instruction if vérifie si firstClicked est égal à null ou Nothing, elle découvre que ce n'est pas le cas et n'exécute pas les instructions dans l'instruction if.Par conséquent, seule la première icône sur laquelle le joueur a cliqué devient noire et les autres restent invisibles, comme indiqué dans l'image suivante.

    Jeu de combinaisons n'affichant qu'une seule icône

    Jeu de combinaisons affichant une icône

Pour continuer ou examiner