Krok 5: Přidání zadejte obslužné rutiny událostí pro ovládací prvky NumericUpDown
Mohli jste zaznamenat něco podivného kolem psaní čísel do ovládacího prvku NumericUpDown.Chcete-li tento problém odstranit, přidejte obslužnou rutinu události Enter.
Zobrazit chování ovládacího prvku NumericUpDown
Spusťte program a spusťte hru.Součtový ovládací prvek NumericUpDown by měl mít blikající kurzor v něm vedle 0 (nula).
Vepište hodnotu 3 a zobrazí se 30.Vepište hodnotu 5 a zobrazí se 350, ale po druhé se změní na 100.
Dříve než vyřešíte tento problém, rozmyslete si, co se děje.Zvažte proto 0 nebyla zmizí, když jste zadali 3. Zvažte proč 350 na 100, a proč došlo ke zpoždění před jej změnit.
[!POZNÁMKA]
Přestože se to může jevit jako podivné chování, je k dispozici vysvětlení.Po kliknutí na tlačítko Zahájení se vlastnost tlačítka Enabled nastaví na hodnotu False a tlačítko se zobrazí šedě a je neaktivní.Program vyhledá ovládací prvek s další nejnižší hodnotou TabIndex – součtový ovládací prvek NumericUpDown – a změní fokus na daný ovládací prvek.Když použijete klávesu Tabulátor k přechodu na ovládací prvek NumericUpDown, automaticky se umístí kurzor na začátek ovládacího prvku, což je to, co způsobuje, že čísla, která zadáte, se zapisují vlevo a nikoli vpravo.Když zadáte číslo nad hodnotu vlastnosti MaximumValue, která je nastavena na hodnotu 100, nahradí zadané číslo maximální hodnotou.
Přidat obslužné rutiny událostí Enter pro ovládací prvky NumericUpDown
Chcete-li zabránit tomuto podivnému chování a usnadnit používání programu, přidejte obslužnou rutinu události pro každý NumericUpDown ovládací prvek události Enter.Použijte stránku Události v dialogovém okně Vlastnosti k přidání obslužné rutiny události Enter pro součtový ovládací prvek NumericUpDown s názvem answer_Enter.
Dialogové okno Vlastnosti
Kód by měl vypadat takto.
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); } }
Ačkoli se to může zdát zpočátku složité, je to srozumitelnější, pokud se na to podíváte krok za krokem.Nejprve hledat v horní části Metoda: object sender v jazyce C# nebo sender As System.Object v jazyce Visual Basic.To znamená, že uvnitř vaší metody kdykoli použijete sender, odkazuje na ovládací prvek NumericUpDown, jehož událost Enter je vyvolávána.Takže v prvním řádku metody specifikujete, že to není pouze objekt, ale specificky NumericUpDown ovládací prvek.(Každý NumericUpDown ovládací prvek je objekt, ale ne každý objekt je NumericUpDown ovládací prvek.) Další řádek ověří, zda byl answerBox úspěšně převeden (přetypován) z objektu na NumericUpDown ovládací prvek.Pokud neúspěšně, měl by mít hodnotu null (jazyk C#) nebo Nothing (jazyk Visual Basic).Třetí řádek najde délku odpověi, která je aktuálně zobrazena v NumericUpDown ovládacím prvku.Čtvrtý řádek říká ovládacímu prvku NumericUpDown, že má vybrat odpověď.Nyní když uživatel přejde do ovládacího prvku, vyvolá tuto událost, která způsobí, že vybere odpověď.Ihned, jakmile uživatel začne psát, je vymazána předchozí odpověď a nahrazena novou odpovědí.
Poté, co je obslužná rutina události na místě, přejděte k Návrháři formulářů a vyberte rozdílový NumericUpDown ovládací prvek.Přejděte na stránku Události v dialogovém okně Vlastnosti, posuňte zobrazení dolů k události Enter a vyberte obslužnou rutinu události, kterou jste právě přidali.
Potom proveďte stejnou akci pro násobící a podílové NumericUpDown ovládací prvky.
Uložte program a spusťte jej.Podivné chování by se již nemělo vyskytovat.
Chcete-li pokračovat nebo znovu projít
Přechod na další výukový program naleznete v tématu Krok 6: Přidání problém odčítání.
K návratu do předchozího kroku výukového programu přejděte na Krok 4: Přidat metodu CheckTheAnswer().