Поделиться через


Шаг 5. Добавление обработчиков событий входа для элементов управления NumericUpDown

Возможно вы обратили внимание на некую странность при вводе чисел в элементе управления NumericUpDown.Чтобы исправить это, добавьте обработчик события Enter.

Просмотр поведения элемента управления NumericUpDown

  1. Выполните программу и запустите игру.Сумма в элементе управления NumericUpDown должна содержать мигающий курсор рядом с 0 (нулем).

  2. Введите 3 и появится значение 30.Введите 5 и появится значение 350, однако секунду спустя оно изменится на 100.

    Перед исправлением ошибки подумайте, почему она возникла.Подумайте, почему не исчезает 0 при вводе значения 3. Подумайте, почему 350 меняется на 100 и почему возникает задержка при изменении.

    ПримечаниеПримечание

    Хотя такое поведение кажется странным, этому есть объяснение.При нажатии на кнопку Пуск, ее свойство Enabled имеет значение False, кнопка отображается серым цветом и недоступна.Программа ищет элемент управления со следующим наименьшим значением свойства TabIndex — сумма в элементе управления NumericUpDown — и меняет фокус к этому элементу управления.При использовании клавиши TAB для перехода к элементу управления NumericUpDown, происходит автоматическое размещение курсора в начале элемента управления, это приводит к тому, что вводимые числа отображаются слева, а не справа.При вводе числа, которое больше значения свойства MaximumValue, которое равно 100, выполняется замена введенного числа на максимальное значение.

Добавление обработчика событий Enter для элемента управления NumericUpDown

  1. Чтобы предупредить такое странное поведение и сделать программу более удобной в использовании, добавьте обработчик событий для события Enter у всех элементов управления NumericUpDown.Чтобы добавить обработчик события Enter для элемента управления NumericUpDown с именем answer_Enter, используемого для отображения суммы, используйте страницу События в окне Свойства.

    Диалоговое окно "Свойства"

    Диалоговое окно "Свойства"

    Код должен выглядеть следующим образом.

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

    Хотя на первый взгляд он может показаться сложным, его легче понять, если просматривать его шаг за шагом.Сначала посмотрите на верхнюю часть метода — object sender в C# или sender As System.Object в Visual Basic.Это значит, что внутри метода, когда используется sender, он указывает на элемент управления NumericUpDown у которого возникло событие Enter.Поэтому в первой строке метода указывается, что это не просто объект, а именно элемент управления NumericUpDown.(каждый элемент управления NumericUpDown это объект, но не каждый объект, это элемент управления NumericUpDown). В следующей строке кода выполняется проверка, что answerBox был успешно преобразован из объекта в элемент управления NumericUpDown.Если операция неуспешна, то он будет иметь значение null (C#) или Nothing (Visual Basic).В третьей строке кода выполняется определение длины ответа, который в настоящий момент отображается в элементе управления NumericUpDown.В четвертой строке указывается элементу управления NumericUpDown выбрать ответ.Теперь, когда пользователь переходит к элементу управления, он вызывает это событие, которое приводит к выбору ответа.Как только пользователь начинает ввод данных, предыдущий ответ стирается и заменяется на новый ответ.

  2. После размещения обработчика событий перейдите в конструктор Windows Forms и выделите другой элемент управления NumericUpDown.Перейдите на страницу События в диалоговом окне Свойства, прокрутите содержимое окна до события Enter и выберите обработчик событий, который был только что добавлен.

  3. Затем проделайте такое же действие для элементов управления NumericUpDown, в которых отображаются значения переменных product (произведения) и quotient (частного).

  4. Сохраните и выполните программу.Странное поведение больше не должно появляться.

Продолжить или повторить пройденный материал