Sdílet prostřednictvím


Krok 5: Přidat obslužné rutiny událostí Enter 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

  1. 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).

  2. 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, proč 0 nezmizela, když jste vepsali hodnotu 3. Zvažte, proč se hodnota 350 změní na 100 a proč došlo ke zpoždění před tím, než se změnila.

    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

  1. 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

    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 As NumericUpDown = TryCast(sender, NumericUpDown)
    
        If answerBox IsNot Nothing Then
            Dim lengthOfAnswer As Integer = 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 se podívejte na horní část metody: 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í.

  2. 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.

  3. Potom proveďte stejnou akci pro násobící a podílové NumericUpDown ovládací prvky.

  4. Uložte program a spusťte jej. Podivné chování by se již nemělo vyskytovat.

Chcete-li pokračovat nebo znovu projít