Diskuze: Kliknutí na špatné tlačitko

C# .NET .NET (C# a Visual Basic) Kliknutí na špatné tlačitko American English version English version

Avatar
michaelbeats7:

static bool kliknuto = false;
static Button sprav;
Otazka(string otazka, string odpoved1, string odpoved2, button spravnaodpoved) //
{
label1.Text = otazka;
button1.Text = odpoved1;
button2.Text = odpoved2;
sprav = spravnaodpoved;
spravnaodpoved­.Click += new EventHandler(clic­kk);
}

private void clickk(object sender, EventArgs e) //kliknutí na spravnou odpověd
{

kliknuto = true;

if (kliknuto = true)
{
sprav.BackColor = Color.Green;
}

Mám jeden label do který se zapiše otázka a 2 buttony do který se zapišou spravný odpovědi. Když kliknu na spravnou tak se mi změni jeho barva na zelenou. Jak to mám udělat, aby když kliknu na špatnou tak se něco dělo? Třeba aby se ukazal messagebox. Prosím nepiště at to celý předělám :D

 
Odpovědět 29. března 11:26
Avatar
sunspinx
Člen
Avatar
sunspinx:

Trochu som sa stratil.

Ak som pochopil mas dva buttony -> Jeden obsahuje spravnu odpoved a druhy nespravnu odpoved, a chces, aby po kliknuti na nespravnu odpoved sa nieco udialo. V tomto pripade (aspon v jave) by si vytvoril metodu, ktora spracovava ten druhy button a v tom uz urobis veci, kt. potrebujes)

Neviem ako to mate v C#, ale podla mna toto je zbytocne, pretoze ta metoda clickk sa uskutocni hned potom ako kliknes na button, takze boolean kliknuto je zbytocne, pretoze to je samozrejme.

kliknuto = true;
if (kliknuto = true)
Editováno 29. března 12:15
 
Nahoru Odpovědět  +1 29. března 12:13
Avatar
Odpovídá na michaelbeats7
Michal Štěpánek:

Jak vyhodnocuješ, která odpověď je správná?

Nahoru Odpovědět 29. března 12:28
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Jakub Šilhavý:

Přidej si do argumentu metody Otazka tlačítko, které zastupuje špatnou odpověď a postupuj stejně jako při vytváření kódu pro tlačítko, které jsi si nazval spravanaodpoved (tzn. vytvoř si pro tlačítko spatnaodpoved událost po kliknutí a do ní piš kód, který se má vykonávat po kliknutí na špatnou odpověď).

Nahoru Odpovědět 29. března 15:08
Život je pes, a proto žít je psina.
Avatar
Odpovídá na Michal Štěpánek
michaelbeats7:

No v ty metodě otázka je jako poslední ten button ve kterým je správná odpověd.

 
Nahoru Odpovědět 29. března 17:09
Avatar
Odpovídá na Jakub Šilhavý
michaelbeats7:

Ano to mě taky napadlo, akorát jsem hledal nějaký kratší způsob. Protože pak těch buttonu bude víc a ty metody by byly pokaždé strašně dlouhé.

 
Nahoru Odpovědět 29. března 17:10
Avatar
VitekST
Člen
Avatar
Odpovídá na michaelbeats7
VitekST:

Kratší způsob říkáš...

No, každý ovládací prvek má vlastnost "Tag", která se dá použít na interní označkování daného prvku.

Pokud nechceš vytvářet pro každé tlačítko metodu, události všech tlačítek si můžeme připíchnout na stejnej handler. Z objektu "sender" si přetypujeme naše tlačítko, ze kterého získáme tu naši značku, kterou proženeme přes switch, kde vyhodnotíme odpověď a následnou akci.

bool kliknuto = false;

Otazka(string otazka, string odpoved1, string odpoved2, int odpovedSpravna /* Pořadí tlačítka, první nebo druhé  - 1 / 2*/){
        label1.Text = otazka;

        button1.Text = odpoved1;
        button2.Text = odpoved2;

        switch(odpovedSpravna){
                case 1:
                        button1.Tag = (object)"correct"; //Tlačítko 1: správná odpověď
                        button2.Tag = (object)"invalid"; //Tlačítko 2: špatná odpověď
                        break;
                case 2:
                        button1.Tag = (object)"invalid"; //Tlačítko 1: špatná odpověď
                        button2.Tag = (object)"correct"; //Tlačítko 2: správná odpověď
                        break;
        }

        button1.Click += OnAnswerClick; //Události obou tlačítek si připíchneme na jeden a samý handler
        button2.Click += OnAnswerClick;
}

private void OnAnswerClick(object sender, EventArgs e){
        Button clicked = (Button) sender; //Deklarace tlačítka, které bylo stisknuto

        string tag = (string)clicked.Tag; //Značka (tag) toho tlačítka

        if(!kliknuto) //Klikli jsme? Jestli ne, pokračujme.
                switch(tag){
                        case "correct":
                                //Správná odpověď

                                MessageBox.Show("Správná odpověď!"); //MsgBox
                                clicked.BackColor = Color.Green; //Barva
                                break;
                        case "invalid":
                                //Špatná odpověď

                                MessageBox.Show("Špatná odpověď!"); //MsgBox
                                clicked.BackColor = Color.Red; //Barva
                                break;
                }

        kliknuto = true; //Klikli jsme.
}

Nemusíš psát zvlášť metody pro další a další tlačítka.
Hodně štěstí. :)

Editováno 29. března 17:59
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +3 29. března 17:57
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 7 zpráv z 7.