Krok 5: Přidání popisku odkazy
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
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 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;
[!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.Proto firstClicked a secondClicked se nazývají referenční proměnné: jsou pouze sledovat (nebo odkazují na) Label objektů.
[!POZNÁMKA]
Proměnná není udržování přehledu o objekt, je nastavena na hodnotu zvláštní: 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.
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.(Nezapomeňte zahrnout komentáře a celé if prohlášení.)
''' <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; } } }
Uložte program a spusťte jej.Klikněte na jeden z ovládacích prvků Label a zobrazí se jeho ikona.
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
Chcete-li pokračovat nebo znovu projít
Přechod na další výukový program naleznete v tématu Krok 6: Přidání časovače.
K návratu do předchozího kroku výukového programu přejděte na Krok 4: Obslužné rutiny události klepněte na tlačítko přidáte na každý štítek.