Krok 5. Dodawanie obsługi zdarzeń wprowadzania dla formantów NumericUpDown

W piątej części tego samouczka dodasz programy obsługi zdarzeń Enter, aby trochę ułatwić wprowadzanie odpowiedzi na pytania quizu.Ten kod zaznaczy i wyczyści bieżącą wartość w każdym formancie NumericUpDown, gdy tylko uczestnik quizu ją wybierze i zacznie wpisywać inną wartość.

[!UWAGA]

Ten temat jest częścią serii samouczków na temat podstawowych pojęć kodowania.Aby uzyskać przegląd samouczka, zobacz Samouczek 2: Utworzenie kwizu matematycznego z limitem czasu.

Aby sprawdzić zachowanie domyślne

  1. Uruchom program i uruchom quiz.

    W formancie NumericUpDown dla problemu dodawania, kursor miga obok 0 (zero).

  2. Wprowadź 3i zwróć uwagę, że formant pokazuje 30.

  3. Wprowadź 5i zwróć uwagę, że pojawia się 350, ale po sekundzie zmienia się na 100.

    Przed rozwiązaniem tego problemu zastanów się, co się dzieje.Należy pomyśleć, dlaczego wartość 0 nie zniknęła po wprowadzeniu wartości 3, i dlaczego wartość 350 zmieniła się na 100, ale nie od razu.

    To zachowanie może się wydawać dziwne, ale ma sens, biorąc pod uwagę logikę kodu.Po wybraniu przycisku Start, jego właściwość Enabled jest ustawiona na False, a przycisk jest wyszarzony i niedostępny.Program zmienia bieżące zaznaczenie (focus) do formantu, który ma następną najniższą wartość TabIndex, jest to formant NumericUpDown dla problemu dodawania.Gdy używasz klawisza Tab do przejścia do formantu NumericUpDown, kursor zostanie automatycznie umieszczony na początku formantu, dlatego wprowadzane liczby są wyświetlane od lewej strony, a nie od prawej.Kiedy poda się numer, który jest większy niż wartość właściwości MaximumValue, ustawionej na 100, wprowadzona liczba zostanie zastąpiona wartością tej właściwości.

Aby dodać moduł obsługi zdarzeń Enter w formancie NumericUpDown

  1. Wybierz pierwszy formant NumericUpDown (o nazwie „sum”) na formularzu, a następnie w oknie dialogowym Właściwości wybierz ikonę Zdarzenia na pasku narzędzi.

    Karta Zdarzenia w oknie dialogowym Właściwości wyświetla wszystkie zdarzenia, na które można odpowiedzieć (które można obsłużyć) dla elementu wybranego w formularzu.Ponieważ wybrano formant NumericUpDown, wszystkie wymienione wydarzenia odnoszą się do niego.

  2. Wybierz zdarzenie Enter, wprowadź wartość answer_Enter, a następnie wybierz klawisz Enter.

    Okno dialogowe właściwości

    Okno dialogowe właściwości

    Dodałeś przed chwilą moduł obsługi zdarzeń Enter dla formantu sumy NumericUpDown i nadałeś mu nazwę answer_Enter.

  3. W metodzie dla programu obsługi zdarzeń answer_Enter dodaj następujący kod.

    ''' <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);
        }
    }
    

    Ten kod może wyglądać na złożony, ale można go zrozumieć, jeśli spojrzy się na niego krok po kroku.Po pierwsze, spójrz na górę metody: object sender w języku C# lub sender As System.Object w języku Visual Basic.Ten parametr odwołuje się do obiektu, którego zdarzenie jest uruchamiane, ten obiekt jest znany jako nadawca.W tym przypadku obiekt nadawcy jest formantem NumericUpDown.W pierwszym wierszu metody należy określić, że nadawca to nie po prostu każdy obiekt rodzajowy, ale konkretnie formant NumericUpDown. (Każdy formant NumericUpDown jest obiektem, ale nie każdy obiekt jest formantem NumericUpDown). Formant NumericUpDown w tej metodzie nosi nazwę answerBox, ponieważ będzie używany dla wszystkich formantów NumericUpDown na formularzu, a nie tylko dla formantu NumericUpDown sumy.Ponieważ zadeklarowano zmienną answerBox w tej metodzie, jej zakres dotyczy tylko tej metody.Innymi słowy zmienna może być używana tylko w ramach tej metody.

    Następny wiersz sprawdza, czy answerBox został pomyślnie przekonwertowany (rzutowany) z obiektu do formantu NumericUpDown.Jeśli konwersja się nie powiodła, zmienna będzie miała wartość null (C#) lub Nothing (Visual Basic).Trzeci wiersz pobiera długość odpowiedzi, która jest wyświetlana w formancie NumericUpDown, a czwarty wiersz wybiera bieżącą wartość w formancie na podstawie tej długości.Teraz, gdy uczestnik quizu wybierze formant, Visual Studio uruchamia zdarzenie, które powoduje wybranie bieżącej odpowiedzi.Gdy tylko osoba wypełniająca quiz zaczyna wprowadzać inną odpowiedź, poprzednia odpowiedź jest czyszczona i zastąpiona nową odpowiedzią.

  4. W programie Windows Forms Designer wybierz formant różnicy NumericUpDown.

  5. Na stronie zdarzenia okna dialogowego Właściwości przewiń w dół do zdarzenia Enter, wybierz rozwijaną strzałkę na końcu wiersza, a następnie wybierz program obsługi zdarzenia answer_Enter, który właśnie został dodany.

  6. Powtórz poprzedni krok dla formantów NumericUpDown iloczynu i ilorazu.

  7. Zapisz swój program, a następnie uruchom go.

    Po wybraniu formantu NumericUpDown, istniejąca wartość jest automatycznie zaznaczana, a następnie czyszczona wtedy, gdy rozpoczniesz wprowadzać inną wartość.

Aby kontynuować lub przeglądnąć