NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Katka Volkova:20.2.2017 21:50

Ahoj,
mám do školy vytvořit hru pexeso, jelikož nevím jak pořádně pracovat s pictureboxy, zvolila jsem buttony, na kterých se zobrazí písmena. Vytvořila jsem si pole buttonů 4x4, ale nevím jak udělat to, aby se při kliknutí vypsalo to určité písmeno, tak abych nemusela psát 16 různých metod na kliknutí. Nevíte někdo co s tím?

 
Odpovědět
20.2.2017 21:50
Avatar
Odpovídá na Katka Volkova
Erik Šťastný:20.2.2017 22:17

Pokud to chápu správně, tak každá metoda by měla vypisovat něco jiného a hlavně by měla měnit vlastnosti jiného buttonu, nevidím důvod proč nenapsat 16 metod, hlavně když budou napojená každá na jiný click event :)

Editováno 20.2.2017 22:18
 
Nahoru Odpovědět
20.2.2017 22:17
Avatar
HONZ4
Člen
Avatar
Odpovídá na Katka Volkova
HONZ4:20.2.2017 22:20

moc nechápu jak to bude fungovat, ale jestli myslíš toto:

private void ClickHandler(object sender, EventArgs e)
        {
            Button btnClicked = sender as Button;
            btnClicked.....
        }
 
Nahoru Odpovědět
20.2.2017 22:20
Avatar
Odpovídá na Katka Volkova
Michael Škrášek:20.2.2017 22:25

Nebo si těch 16 tlačítek vygeneruj ... a při vytvářeni nastav metody ....

for (int i = 0; i < 16; i++)
{
        Button btn = new Button();
        btn.Text = "";
        btn.Click += new EventHandler((object obj, EventArgs args) =>
        {
                btn.Text = karty[i];
                ...
        });
}
Nahoru Odpovědět
20.2.2017 22:25
"I choose a lazy person to do a hard job. Because that person will find an easy way to do it. " Bill Gates
Avatar
VitekST
Člen
Avatar
Odpovídá na Michael Škrášek
VitekST:8.3.2017 21:27

Tvoje řešení má jednu chybu - pro každé tlačítko vytváříš novou anonymní metodu.
Při 256 (16*16 pole) tlačítkách to možná až tak moc nevadí, ale řekněme, že ten počet poroste.

Co takhle vytvořit jednu metodu pro všechna tlačítka a každé tlačítko rozlišovat pomocí vlastnosti Tag, přičemž instanci třídy Button získáš přetypováním parametru sender?

Třeba takto:

//Cyklus
for (int i = 0; i < 16; i++)
{
        Button btn = new Button();
        btn.Text = "";
        btn.Tag = karty[i];
        btn.Click += ButtonClick;

        //...
}

//Handler
void ButtonClick(object sender, EventArgs e){
        if(!(sender is Button))
                return;

        Button btn = sender as Button;
        btn.Text = karty[btn.Tag as int];

        //...
}
Editováno 8.3.2017 21:28
 
Nahoru Odpovědět
8.3.2017 21:27
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.