Я хочу, чтобы пользователь поместил данные в текстовое поле указанным способом в Vb.net

В номере машины формат записи будет таким же. Пример: номер автомобиля написан только в порядке: RJ20CF2091. Теперь рассмотрим это слева направо. На первых двух местах должен стоять только алфавит, на следующих двух (3-е и 4-е место) должны идти только цифры, на 5-м и 6-м месте должен стоять только алфавит, а на последних 4 (7-м, 8-м, 9-м и 10-м) должна стоять только цифра , Данные в текстовом поле должны быть точно размером 10.

Всего 2 ответа


Используя MaskedTextBox , вы можете предоставить маску, которая допускает только определенные наборы символов в определенных позициях.

Поскольку ваши входные данные: 2 Letters + 2 Numbers + 2 Letters + 4 Numbers , это можно выразить, используя элементы маски, описанные в свойстве MaskedTextBox.Mask элемента управления, как: LL00LL0000 .

Обратите внимание, что вам также необходимо установить для свойства AsciiOnly значение True .

Поскольку для ввода используются только заглавные буквы, вы можете использовать событие KeyPress для автоматического преобразования в верхний регистр ввода пользователя:

Private Sub MaskedTextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles MaskedTextBox1.KeyPress
    e.KeyChar = Char.ToUpper(e.KeyChar)
End Sub

Прежде всего, вы должны определить, когда должна проходить валидация:

  • Когда текстовое поле теряет фокус?

  • За каждое набранное письмо?

  • Когда пользователь нажимает кнопку, например «ОК»?

Затем вам нужно определить, что должно произойти, если ввод пользователя недействителен:

  • Сделать что-нибудь красное?
  • Показывать восклицательный знак или другой логотип где-нибудь?
  • Деактивировать другие элементы управления?

Для вашей реальной проблемы вы можете использовать выражения Regluar, как это:

bool isValid = System.Text.RegularExpressions.Regex.IsMatch("RJ20CF2091",@"^[A-Za-z]{2}[0-9]{2}[A-Za-z]{2}[0-9]{4}");

(см. https://regex101.com/r/4VPBXx/1 )


Есть идеи?

10000