Diskuze: Kliknutí na špatné tlačitko
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 7 zpráv z 7.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
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)
Jak vyhodnocuješ, která odpověď je správná?
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ěď).
No v ty metodě otázka je jako poslední ten button ve kterým je správná odpověd.
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é.
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í.
Zobrazeno 7 zpráv z 7.