Krok 5: Přidejte obslužné rutiny události pro ovládací prvky NumericUpDown
V páté části tohoto tutoriálu přidáte obslužné rutiny události Enter abyste trochu usnadnili zadávání odpovědí pro kvíz.Tento kód vybere a vymaže aktuální hodnotu v každém ovládacím prvku NumericUpDown, jakmile jej uživatel vyplňující kvíz vybere a začne zadávat jinou hodnotu.
[!POZNÁMKA]
Toto téma je součástí řady výukových programů o základních principech kódování.Přehled tutoriálu naleznete v tématu Tutoriál 2: Vytvoření matematického kvízu s časovým limitem.
Ověření výchozího chování
Spusťte program a spusťte kvíz.
V ovládacím prvku NumericUpDown pro sčítání bliká kurzor vedle 0 (nula).
Zadejte 3 a všimněte si, že ovládací prvek zobrazí 30.
Zadejte 5 a všimněte si, že se zobrazí 350, ale po druhém se změní na 100.
Než vyřešíte tento problém, zamyslete se, co se děje.Zvažte, proč 0 nezmizela poté, co jste zadali 3 a proč 350 se změnilo na 100, ale nikoliv okamžitě.
Toto chování se může zdát neobvyklé, ale s ohledem na logiku kódu dává smysl.Po kliknutí na tlačítko Zahájení se vlastnost Enabled nastaví na hodnotu False a tlačítko se zobrazí šedě a je neaktivní.Váš program změní aktuální výběr (přepne fokus) na ovládací prvek s další nejnižší hodnotou TabIndex, což je ovládací prvek NumericUpDown pro úlohu sčítání.Když použijete klávesu Tab k přechodu na ovládací prvek NumericUpDown, automaticky se umístí kurzor na začátek ovládacího prvku, což je důvod, proč se čísla, která zadáte, zapisují vlevo a nikoli vpravo.Pokud zadáte číslo vyšší než hodnota vlastnosti MaximumValue, která je nastavena na hodnotu 100, číslo, které jste zadali bude nahrazeno hodnotou této vlastnosti.
Přidat obslužné rutiny událostí Enter pro ovládací prvek NumericUpDown
Zvolte první ovládací prvek NumericUpDown (s názvem "suma") ve formuláři a poté v dialogovém okně Vlastnosti zvolte ikonu Události na panelu nástrojů.
Karta Události v dialogovém okně Vlastnosti zobrazí všechny události, na které můžete reagovat (zpracovat) pro položku, které můžete zvolíte ve formuláři.Vzhledem k tomu, že jste zvolili ovládací prvek NumericUpDown, přísluší k němu všechny uvedené události.
Zvolte událost Enter, zadejte answer_Enter a pak zvolte klávesu Enter.
Dialogové okno Vlastnosti
Právě jste přidali obslužnou rutiny událostí Enter pro součtový ovládací prvek NumericUpDown a pojmenovali jste obslužnou rutinu answer_Enter.
V metodě pro obslužnou rutinu answer_Enter přidejte následující kód.
''' <summary> ''' Modify the behavior of the NumericUpDown control ''' to make it easier to enter numeric values for ''' the quiz. ''' </summary> Private Sub answer_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles sum.Enter ' Select the whole answer in the NumericUpDown control. Dim answerBox = TryCast(sender, NumericUpDown) If answerBox IsNot Nothing Then Dim lengthOfAnswer = answerBox.Value.ToString().Length answerBox.Select(0, lengthOfAnswer) End If End Sub
private void answer_Enter(object sender, EventArgs e) { // Select the whole answer in the NumericUpDown control. NumericUpDown answerBox = sender as NumericUpDown; if (answerBox != null) { int lengthOfAnswer = answerBox.Value.ToString().Length; answerBox.Select(0, lengthOfAnswer); } }
Tento kód může vypadat složité, ale lze jej pochopit, pokud se na něj podíváte krok za krokem.Nejprve se podívejte na horní část metody: object sender v jazyce C# nebo sender As System.Object v jazyce Visual Basic.Tento parametr odkazuje na objekt, jehož událost je vyvolávána, a je znám jako odesílatel.V takovém případě objekt odesílatel je ovládací prvek NumericUpDown.Takže v prvním řádku metody specifikujete, že odesílatel není pouze obecný objekt, ale specificky ovládací prvek NumericUpDown. (Každý ovládací prvek NumericUpDown je objekt, ale ne každý objekt je ovládací prvek NumericUpDown.) Ovládací prvek NumericUpDown je v této metodě pojmenován answerBox, protože se bude používat pro všechny ovládací prvky NumericUpDown ve formuláři, nikoli pouze pro součtový ovládací prvek NumericUpDown.Vzhledem k tomu, že deklarujete proměnnou answerBox v této metodě, její obor platí pouze pro tuto metodu.Jinými slovy proměnné lze použít pouze v rámci této metody.
Další řádek ověří, zda byl answerBox úspěšně převeden (přetypován) z objektu na NumericUpDown ovládací prvek.Pokud převod byl neúspěšný, má proměnná hodnotu null (C#) nebo Nothing (Visual Basic).Třetí řádek získá délku odpovědi, která se zobrazí v ovládacím prvku NumericUpDown, a čtvrtý řádek vybere aktuální hodnotu v ovládacím prvku v závislosti na této délce.Nyní když autor kvízu vybere ovládací prvek, aplikace Visual Studio vyvolá tuto událost, což způsobí, že bude vybrána aktuální odpověď.Jakmile autor kvízu začne zadávat různé odpovědi, předchozí odpověď je vymazána a nahrazena novou odpovědí.
V Návrháři Windows Forms vyberte rozdíl ovládacího prvku NumericUpDown.
Na stránce Události dialogového okna Vlastnosti přejděte dolů na událost Enter, zvolte rozevírací seznam na konci řádku a pak zvolte obslužnou rutinu události answer_Enter, kterou jste právě přidali.
Opakujte předchozí krok pro násobící a podílové ovládací prvky NumericUpDown.
Uložte program a poté jej spusťte.
Když vyberete ovládací prvek NumericUpDown, je existující hodnota automaticky vybrána a potom vymazána po spuštění zadat jiné hodnoty.
Pokračování nebo kontrola
Přechod na další výukový program naleznete v tématu Krok 6: Přidejte problém odečtení.
K návratu do předchozího kroku výukového programu přejděte na Krok 4: Přidejte metodu CheckTheAnswer().