По первому вопросу: используйте событие «Нажатие клавиши», чтобы проверить наличие строчных букв, а затем вернуть его верхний регистр:
Private Sub textbox_KeyPress(KeyAscii As Integer)
Const ASCII_LOWER_A = 97
Const ASCII_LOWER_Z = 122
Const UPPER_MODIFIER = -32
If KeyAscii >= ASCII_LOWER_A And KeyAscii <= ASCII_LOWER_Z Then
KeyAscii = KeyAscii + UPPER_MODIFIER
End If
End Sub
ОБНОВЛЕНИЕ : так как яПолучив критику и отрицательный ответ за мой ответ, я уточню, когда и почему вы можете использовать приведенный выше код.
Сначала позвольте мне сказать, что событие * After_Update * срабатывает после того, как элемент управления, связанный с этим событием, теряет фокус(либо через вкладку, либо фактически переходя к следующей записи).* After_Update * также распознает вставку, если пользователь вырезает и вставляет текст;по общему признанию, мой код не делает.Если ваша единственная задача - сохранить текст в базе данных в верхнем регистре, непременно используйте * After_Update * для UCase значения.
Однако есть одно преимущество, которое дает нажатие * KEY_PRESS *: возможностьчтобы исправить букву, нажатую в режиме реального времени.
Разработчику-пуристу это событие может показаться расточительным.Тем не менее, любой, кто получил зарплату от компании, должен признать, что обязательным условием является поддержание платежеспособного клиента.Если этот платный клиент говорит « Я хочу видеть заглавные буквы, когда пользователь начинает вводить », тогда вы должны использовать код выше.Это будет иметь незначительное влияние (если таковое имеется) на поведение приложения и будет отвечать требованиям вашего начальника.
На самом деле, может быть, клиент говорит « Эй, это поле для ввода серийных номеров для нашего инвентаря.Все серийные номера продуктов используют нули, а не букву O. Поэтому, пожалуйста, убедитесь, что они не вводят O для этого поля . ”
Теперь * KEY_PRESS * имеет дополнительное использование.Вы можете либо отрицать нажатую букву O, либо вы можете заменить букву O нажатой на нужное вам значение:
Private Sub TextBox_KeyPress(KeyAscii As Integer)
Const ASCII_LOWER_A = 97
Const ASCII_LOWER_Z = 122
Const UPPER_MODIFIER = -32
Const UPPER_O = 79
Const LOWER_O = 111
Const ZERO_ASCII = 48
Select Case KeyAscii
Case UPPER_O, LOWER_O
KeyAscii = 0 'Cancel it out
'KeyAscii = ZERO_ASCII 'OR Replace it with the number zero
Case ASCII_LOWER_A To ASCII_LOWER_Z
KeyAscii = KeyAscii + UPPER_MODIFIER 'The old familiar code that will capitalize all other letters
Case Else
'Whatever other validations you want to do on the textbox here.
End Select
End Sub
Так как насчет вырезания и вставки недопустимых значений?Для этого и существует событие Form_BeforeUpdate.Вы можете проверить все значения перед сохранением и установить Cancel = True, если что-то не соответствует.
Это очень полезное событие, которое полностью применимо, если вы хотите использовать UCase буквы в реальном времени.