Sdílet prostřednictvím


Krok 5: Přidat odkazy jmenovek

Program potřebuje udržovat přehled o tom, na který ovládací prvek Label hráč kliknul. Po prvním kliknutí na jmenovku program zobrazí ikonu jmenovky. Po kliknutí na druhou jmenovku program potřebuje zobrazit obě ikony po krátkou dobu a potom opět ikony skrýt. Program bude udržovat přehled, na který ovládací prvek Label bylo kliknuto jako první, a na který jako druhý pomocí referenčních proměnných.

Přidat odkazy jmenovek

  1. Přidat odkazy jmenovek do formuláře pomocí následujícího kódu.

    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
        Dim firstClicked As Label = Nothing
    
        ' secondClicked points to the second Label control 
        ' that the player clicks
        Dim 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;
    

    Poznámka

    Referenční proměnné vypadají podobně jako příkazy, které jste použili k přidání objektů (například objekty Timer, objekty List a objekty Random) do formuláře. Tyto příkazy však nezpůsobí, že se ve formuláři zobrazí další dva ovládací prvky Label, protože v obou dvou příkazech není k dispozici žádné new. Bez new není vytvořen žádný objekt. To je důvod, proč se firstClicked a secondClicked nazývají referenční proměnné: Pouze udržují přehled (nebo odkazují na) o Label objektech.

    Poznámka

    Jestliže proměnná neudržuje přehled o objektu, je nastavena na zvláštní hodnotu: null v jazyce Visual C# a Nothing v jazyce Visual Basic. Proto při spuštění programu obě firstClicked a secondClicked jsou nastaveny na null nebo Nothing, což znamená, že proměnné neudržují přehled o ničem.

  2. Upravte vaši obslužnou rutinu události Click k použití nové referenční proměnné firstClicked. Odeberte poslední příkaz v metodě obslužné rutiny události label_Click() (clickedLabel.ForeColor = Color.Black;) a nahraďte jej příkazem if, který následuje. (Přesvědčete se, že jste zahrnuli komentář a vše mezi složenými závorkami.)

    ''' <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 As Label = 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
                Return
            End If
    
            ' 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
                Return
            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. Uložte program a spusťte jej. Klikněte na jeden z ovládacích prvků Label a zobrazí se jeho ikona.

  4. Klikněte na další ovládací prvek Label a všimněte si, že se nic nestane. Program již udržuje přehled o první jmenovce, na kterou hráč kliknul, takže firstClicked není rovno null v jazyce Visual C# nebo Nothing v jazyce Visual Basic. Pokud váš příkaz if zkontroluje firstClicked a zjistí, zda je roven null nebo Nothing, zjistí, že není a neprovede příkazy v příkazu if. Takže pouze první ikona, která je označena, zčerná a další ikony jsou skryté, jak je znázorněno na následujícím obrázku.

    Skládačka zobrazující jednu ikonu

    Skládačka zobrazující jednu ikonu

Chcete-li pokračovat nebo znovu projít