Krok 3: Přiřazení náhodné ikonu na každý štítek
Pokud hra skryje vždy stejné ikony na stejných umístěních, není to náročné.Potřebujete přiřadit ikony náhodně svým Label ovládacím prvkům ve formuláři.Uděláte to tak, že přidáte AssignIconsToSquares() metodu.
Přiřadit náhodnou ikonu každé jmenovce
Před přidáním následujícího kódu zvažte, jak metoda funguje.Existuje nové klíčové slovo: foreach v jazyce Visual C# a For Each v jazyce Visual Basic.(Jeden z řádků je záměrně jako komentář, což je vysvětleno na konci této procedury.)
''' <summary> ''' Assign each icon from the list of icons to a random square ''' </summary> ''' <remarks></remarks> Private Sub AssignIconsToSquares() ' The TableLayoutPanel has 16 labels, ' and the icon list has 16 icons, ' so an icon is pulled at random from the list ' and added to each label For Each control In TableLayoutPanel1.Controls Dim iconLabel = TryCast(control, Label) If iconLabel IsNot Nothing Then Dim randomNumber = random.Next(icons.Count) iconLabel.Text = icons(randomNumber) ' iconLabel.ForeColor = iconLabel.BackColor icons.RemoveAt(randomNumber) End If Next End Sub
/// <summary> /// Assign each icon from the list of icons to a random square /// </summary> private void AssignIconsToSquares() { // The TableLayoutPanel has 16 labels, // and the icon list has 16 icons, // so an icon is pulled at random from the list // and added to each label foreach (Control control in tableLayoutPanel1.Controls) { Label iconLabel = control as Label; if (iconLabel != null) { int randomNumber = random.Next(icons.Count); iconLabel.Text = icons[randomNumber]; // iconLabel.ForeColor = iconLabel.BackColor; icons.RemoveAt(randomNumber); } } }
Přidejte AssignIconsToSquares() metodu, jak je uvedeno v předchozím kroku.Můžete ji umístit pod kód, který jste přidali v Krok 2: Přidání objektu náhodné a seznam ikon.
Něco nového v vaše AssignIconsToSquares() metoda: foreach smyčky v aplikaci Visual C# a For Each v jazyce Visual Basic.Použijte smyčku For Each kdykoli, kdy chcete provést stejnou akci znovu a znovu.V tomto případě chcete spustit stejné příkazy pro každou jmenovku ve vašem TableLayoutPanel kontejneru popsané následujícím kódem.První řádek vytváří proměnnou s názvem control , ukládá každý ovládací prvek, jeden v době při smyčku na něj má příkazy ovládací prvek.
For Each control In TableLayoutPanel1.Controls ' The statements you want to execute ' for each label go here ' The statements use iconLabel to access ' each label's properties and methods Next
foreach (Control control in tableLayoutPanel1.Controls) { // The statements you want to execute // for each label go here // The statements use iconLabel to access // each label's properties and methods }
[!POZNÁMKA]
Názvy iconLabel a ovládací prvek se používají, protože jsou popisné.Tyto názvy nelze nahradit všechny názvy a je stejně pracovat jako změněn název každého příkazu uvnitř smyčky.
Metoda AssignIconsToSquares() prochází jednotlivé ovládací prvky Label v TableLayoutPanel kontejneru a provede stejné příkazy pro každý z nich.Tyto příkazy vyžádají náhodnou ikonu ze seznamu, který jste přidali v Krok 2: Přidání objektu náhodné a seznam ikon.(To je důvod, proč jste zahrnuli dvě z každé ikony v seznamu, aby se spárovaly ikony přiřazené k náhodnému ovládacímu prvku Label.)
Lépe prohlédnout kód, který pracuje uvnitř foreach nebo For Each smyčky.Tento kód je uveden zde.
Dim iconLabel = TryCast(control, Label) If iconLabel IsNot Nothing Then Dim randomNumber = random.Next(icons.Count) iconLabel.Text = icons(randomNumber) ' iconLabel.ForeColor = iconLabel.BackColor icons.RemoveAt(randomNumber) End If
Label iconLabel = control as Label; if (iconLabel != null) { int randomNumber = random.Next(icons.Count); iconLabel.Text = icons[randomNumber]; // iconLabel.ForeColor = iconLabel.BackColor; icons.RemoveAt(randomNumber); }
Převede první řádek control k proměnné Label s názvem iconLabel.Řádek, který po if příkaz, který zkontroluje převod pracoval.Pokud převod úspěšný, příkazy if příkaz Spustit.První řádek v if prohlášení vytváří proměnnou s názvem randomNumber , který obsahuje náhodné číslo odpovídající položky v seznamu ikon.Chcete-li to provést, používá Next metodu Random objekt, který jste vytvořili dříve.Next Metoda vrátí náhodné číslo.Tento řádek se používá také Count vlastnost icons seznamu určit rozsah pro výběr náhodné číslo.Další řádek přiřadí jednu ikonu položky seznamu Text vlastností popisek.Na řádku s komentářem out je vysvětleno dále v tomto tématu.A konečně poslední řádek if příkaz odebere ze seznamu ikonu, která byla přidána do formuláře.
Nezapomeňte, pokud si nejste jisti neobsahuje některé části kódu, může ukazatel myši nad element kódu a zkontrolujte výsledný tooltip.
Je třeba volat AssignIconsToSquares() metodu hned, jakmile je program spuštěn.Píšete-li kód jazyka Visual C#, přidejte příkaz pod volání metody InitializeComponent() v konstruktoru formuláře Form1, tak formulář zavolá vaši novou metodu, aby se sám nastavil dříve, než je zobrazen.
public Form1() { InitializeComponent(); AssignIconsToSquares(); }
V jazyce Visual Basic nejprve přidejte konstruktor, a pak přidejte volání metody do konstruktoru.Před metodou AssignIconsToSquares(), kterou jste právě vytvořili, začněte psaním kódu Public Sub New().Když stisknete klávesu Enter k přesunu na další řádek, měla by technologie IntelliSense zobrazit následující kód k dokončení konstruktoru.
Public Sub New() ' This call is required by Windows Form Designer InitializeComponent() ' Add any initialization after the InitializeComponent() call End Sub
Přidejte volání metody AssignIconsToSquares() tak, že váš konstruktor vypadá jako následující.
Public Sub New() ' This call is required by Windows Form Designer InitializeComponent() ' Add any initialization after the InitializeComponent() call AssignIconsToSquares() End Sub
Uložte program a spusťte jej.Měl by se zobrazit formulář s náhodnými ikonami přiřazenými každé jmenovce.
Zavřete program a znovu jej spusťte.Nyní jsou různé ikony přiřazeny každé jmenovce, jak je znázorněno na následujícím obrázku.
Skládačka s náhodnými ikonami
Nyní ukončete program a zrušte komentář tohoto řádku kódu uvnitř For Each smyčky.
iconLabel.ForeColor = iconLabel.BackColor
iconLabel.ForeColor = iconLabel.BackColor;
Klepněte na tlačítko Uložit vše z panelu nástrojů k uložení programu a spusťte jej.Ikony zdánlivě zmizely – zobrazí se pouze modré pozadí.Avšak ikony jsou náhodně přiřazeny a stále existují.Vzhledem k tomu, že ikony mají stejnou barvu jako pozadí, jsou skryté.
Chcete-li pokračovat nebo znovu projít
Přechod na další výukový program naleznete v tématu Krok 4: Obslužné rutiny události klepněte na tlačítko přidáte na každý štítek.
K návratu do předchozího kroku výukového programu přejděte na Krok 2: Přidání objektu náhodné a seznam ikon.