Проверка поля для IP-адреса - PullRequest
1 голос
/ 28 апреля 2009

Я пытаюсь запретить пользователю вводить что-либо в конкретное текстовое поле, кроме числа или точки в C #. Текстовое поле должно содержать IP-адрес. У меня это работает так, что нечисловые записи предотвращаются, однако я не могу получить его, чтобы можно было ввести период. Как мне это сделать?

    private void TargetIP_KeyDown(object sender, KeyEventArgs e)
    {
        // Initialize the flag to false.
        nonNumberEntered = false;

        // Determine whether the keystroke is a number from the top of the keyboard.
        if (e.KeyCode < Keys.D0 || e.KeyCode > Keys.D9)
        {
            // Determine whether the keystroke is a number from the keypad.
            if (e.KeyCode < Keys.NumPad0 || e.KeyCode > Keys.NumPad9)
            {
                // Determine whether the keystroke is a backspace.
                if (e.KeyCode != Keys.Back)
                {
                    nonNumberEntered = true;
                    errorProvider1.SetError(TargetIP, FieldValidationNumbersOnly);
                    // A non-numerical keystroke was pressed.
                    // Set the flag to true and evaluate in KeyPress event.
                }
            }
        }

        //If shift key was pressed, it's not a number.
        if (Control.ModifierKeys == Keys.Shift)
        {
            nonNumberEntered = true;
        }
    }


    private void TargetIP_KeyPress(object sender, KeyPressEventArgs e)
    {
        // Check for the flag being set in the KeyDown event.
        if (nonNumberEntered == true)
        {
            // Stop the character from being entered into the control since it is non-numerical.
            e.Handled = true;
        } 

        else
        {
            errorProvider1.Clear();
        }
    }

1 Ответ

9 голосов
/ 28 апреля 2009

Вы должны использовать MaskedTextBox вместо обычного TextBox. Затем просто установите для свойства Mask значение 990\.990\.990\.990, и все готово.

  • 9 необязательная цифра или пробел
  • 0 обязательная цифра
  • \. экранированная точка

UPDATE

Хотя я и предложил использовать MaskedTextBox, я никогда (по крайней мере, не помню) сам не использовал его. Теперь я просто попробовал ... ну, забудь, что я сказал. Я подумал, что это может быть простое решение, но это тоже непригодное решение.

Новое, более сложное, но гораздо лучшее предложение и способ, которым я обычно делаю это.

  • Создайте пользовательский элемент управления с четырьмя текстовыми полями, по три метки с точкой между ними.

  • Анализ входных данных.

    • Просто передайте ключи управления элементу управления.
    • Перемещение фокуса, если пользователь вводит точку, табуляцию (будет обрабатываться элементом управления), пробел, может быть четвертой цифрой.
    • Откажитесь от всего, что не является цифрой.
    • Сбросить цифру, если число выпадает из диапазона от 0 до 255.
    • Измените текст на 0, если пользователь удаляет последнюю цифру.
    • Удалить начальный ноль, если пользователь вводит ненулевую цифру.
  • Добавление в пользовательский элемент управления свойства, которое возвращает введенный адрес.

  • Возможно, сделаем proeprty доступным для записи и добавим обработку событий.

...