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
michaelbeats7:29.3.2016 11:26

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.3.2016 11:26
Avatar
Vladislav Domin:29.3.2016 12:13

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.3.2016 12:15
 
Nahoru Odpovědět
29.3.2016 12:13
Avatar
Odpovídá na michaelbeats7
Michal Štěpánek:29.3.2016 12:28

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

Nahoru Odpovědět
29.3.2016 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ý:29.3.2016 15:08

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.3.2016 15:08
Život je pes, a proto žít je psina.
Avatar
Odpovídá na Michal Štěpánek
michaelbeats7:29.3.2016 17:09

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

 
Nahoru Odpovědět
29.3.2016 17:09
Avatar
Odpovídá na Jakub Šilhavý
michaelbeats7:29.3.2016 17:10

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.3.2016 17:10
Avatar
VitekST
Člen
Avatar
Odpovídá na michaelbeats7
VitekST:29.3.2016 17:57

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.3.2016 17:59
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
29.3.2016 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.