Кто подскажет, есть-ли что нибудь такое в VB6? Должно быть, по идее, но не могу найти или не то ищу (не знаю, что искать). Подскажите, братцы.
Простой вопрос по VB6
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
- Seaman
- Пользователь
- Сообщения: 197
- Зарегистрирован: 21 фев 2003, 13:26
- Откуда: Ессентуки-Нврск-СПб-Торонто
Простой вопрос по VB6
Нужно ограничить вводимые через TextBox значки в VB6 аппликации шестнадцатиричными значениями (0 ... F). Как можно организовать проверку на "вшивость" в данном случае, чтобы выдать пользователю ошибку в MsgBox в случае, если он ввел что-то не дозволенное?
Кто подскажет, есть-ли что нибудь такое в VB6? Должно быть, по идее, но не могу найти или не то ищу (не знаю, что искать). Подскажите, братцы.
Кто подскажет, есть-ли что нибудь такое в VB6? Должно быть, по идее, но не могу найти или не то ищу (не знаю, что искать). Подскажите, братцы.
- Vitaliy-2000
- Пользователь
- Сообщения: 72
- Зарегистрирован: 29 авг 2003, 03:27
- Откуда: Москва-Торонто
- Контактная информация:
Re: Простой вопрос по VB6
точно естьSeaman писал(а):Нужно ограничить вводимые через TextBox значки в VB6 аппликации шестнадцатиричными значениями (0 ... F). Как можно организовать проверку на "вшивость" в данном случае, чтобы выдать пользователю ошибку в MsgBox в случае, если он ввел что-то не дозволенное?
Кто подскажет, есть-ли что нибудь такое в VB6? Должно быть, по идее, но не могу найти или не то ищу (не знаю, что искать). Подскажите, братцы.
такое уже писано переписано. общая идея такая что надо ловить "киипресы" и смотреть введеный код
поищи в инете - примеров тьма тьмущая
- Seaman
- Пользователь
- Сообщения: 197
- Зарегистрирован: 21 фев 2003, 13:26
- Откуда: Ессентуки-Нврск-СПб-Торонто
Пока не нашел, сделал так:
Не особо сложно-ли, может что по-проще есть?
А ловить "кей", думаю будет тоже самое.
Код: Выделить всё
Dim strHexa(15) As String
Private Sub Command1_Click()
Dim strText As String
Dim intChar As Integer
Dim intHex As Integer
Dim intError As Integer
strText = Text1.Text & Text2.Text
For intChar = 1 To 8 Step 1
For intHex = 0 To 15 Step 1
If Mid(strText, intChar, 1) = strHexa(intHex) Then
Exit For
End If
Next intHex
If intHex = 16 Then
intError = 1
GoTo FormError
End If
Next intChar
...
FormError:
If intError = 1 Then
MsgBox "Only Hexadecimals are allowed here!", vbOKOnly + vbExclamation, "Error"
Text1.Text = ""
Text2.Text = ""
strText = ""
Text1.SetFocus
End If
End SubА ловить "кей", думаю будет тоже самое.
- папа Карло
- Шарманщик
- Сообщения: 8565
- Зарегистрирован: 17 фев 2003, 15:04
- Откуда: НН -> BC -> WA -> UT -> CA
KeyUp event надо ловить и чар его обрабатывать....Seaman писал(а):Пока не нашел, сделал так:Код: Выделить всё
Dim strHexa(15) As String Private Sub Command1_Click() Dim strText As String Dim intChar As Integer Dim intHex As Integer Dim intError As Integer strText = Text1.Text & Text2.Text For intChar = 1 To 8 Step 1 For intHex = 0 To 15 Step 1 If Mid(strText, intChar, 1) = strHexa(intHex) Then Exit For End If Next intHex If intHex = 16 Then intError = 1 GoTo FormError End If Next intChar ... FormError: If intError = 1 Then MsgBox "Only Hexadecimals are allowed here!", vbOKOnly + vbExclamation, "Error" Text1.Text = "" Text2.Text = "" strText = "" Text1.SetFocus End If End SubНе особо сложно-ли, может что по-проще есть?
А ловить "кей", думаю будет тоже самое.
- Vitaliy-2000
- Пользователь
- Сообщения: 72
- Зарегистрирован: 29 авг 2003, 03:27
- Откуда: Москва-Торонто
- Контактная информация:
Вот смотри: ты сначала позволил юзеру ввести все что он хочет. Он радостный такой, особливо на фоне того что есть подпись вводить токма шешнадцатиричные символы, а он такой моодца смог ввести что захотел.. потом он кликает.. читает твой мессаджбокс, нажимает на нем пидаль ок, опять идет вводить/править текстSeaman писал(а):Пока не нашел, сделал так:Код: Выделить всё
Dim strHexa(15) As String Private Sub Command1_Click() Dim strText As String Dim intChar As Integer Dim intHex As Integer Dim intError As Integer strText = Text1.Text & Text2.Text For intChar = 1 To 8 Step 1 For intHex = 0 To 15 Step 1 If Mid(strText, intChar, 1) = strHexa(intHex) Then Exit For End If Next intHex If intHex = 16 Then intError = 1 GoTo FormError End If Next intChar ...Не особо сложно-ли, может что по-проще есть?
А ловить "кей", думаю будет тоже самое.
а нуно ИМХО делать так что он НЕ может ввести ничего что выпадает из ряда. шагов по вводу будет сильно меньше -> меньше глюков -> проще дальнейший апдейт
- Seaman
- Пользователь
- Сообщения: 197
- Зарегистрирован: 21 фев 2003, 13:26
- Откуда: Ессентуки-Нврск-СПб-Торонто
Моя проблема в том только, на данный момент, что я не знаю как избавиться в таком случае от следующего бага:
Чтобы исключить всякие инсинуации со стороны "умного" юзера, который пожелает ввести строку не заглавными, а строчными буквами, я дожидаюсь окончания ввода строки и на lostfocus перекидываю все буквы в upper case. Если я делаю это на keyup, то после перевода буквы в upper case, курсор возвращается в начало строки, чего нам не надо
Можно, конечно, добавить эти 6 буковок нижнего регистра в аррэй разрешенных значков и переводить их в верхний регистр после того как, но правильное ли это решение вопроса?
Чтобы исключить всякие инсинуации со стороны "умного" юзера, который пожелает ввести строку не заглавными, а строчными буквами, я дожидаюсь окончания ввода строки и на lostfocus перекидываю все буквы в upper case. Если я делаю это на keyup, то после перевода буквы в upper case, курсор возвращается в начало строки, чего нам не надо
Можно, конечно, добавить эти 6 буковок нижнего регистра в аррэй разрешенных значков и переводить их в верхний регистр после того как, но правильное ли это решение вопроса?
- Seaman
- Пользователь
- Сообщения: 197
- Зарегистрирован: 21 фев 2003, 13:26
- Откуда: Ессентуки-Нврск-СПб-Торонто
Вот сделал так:, но опять же проблема в фокусе.
Как сделать так, чтобы после удаления неправильной буквы курсор оставался в конце строки, а не скакал в ее начало?:dunno:
Код: Выделить всё
Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
Dim intHex As Integer
Dim intError As Integer
For intHex = 0 To 21 Step 1
If Mid(Text1.Text, Len(Text1.Text), 1) = strHexa(intHex) Then
Exit For
End If
Next intHex
If intHex = 22 Then
intError = 1
GoTo FormError
End If
If Len(Text1.Text) = 4 Then
Text2.SetFocus
End If
FormError:
If intError = 1 Then
MsgBox "Only Hexadecimals are allowed here!", vbOKOnly + vbExclamation, "Error"
Text1.Text = Replace(Text1.Text, Mid(Text1.Text, Len(Text1.Text), 1), "")
End If
End SubКак сделать так, чтобы после удаления неправильной буквы курсор оставался в конце строки, а не скакал в ее начало?:dunno:
- Seaman
- Пользователь
- Сообщения: 197
- Зарегистрирован: 21 фев 2003, 13:26
- Откуда: Ессентуки-Нврск-СПб-Торонто
О.К. додумался:
Какой я вумный! Ну прям як вутка!
Код: Выделить всё
Text1.SelStart = Len(Text1.Text)-
tasko
- Графоман
- Сообщения: 18705
- Зарегистрирован: 20 июл 2003, 09:16
- Откуда: Торонто
Ну вот видишь? Если долго мучится, что-нибудь получится.Seaman писал(а):О.К. додумался:Код: Выделить всё
Text1.SelStart = Len(Text1.Text)Какой я вумный! Ну прям як вутка!
Однако я бы не ловил событие KeyUP. Лучшим решением является событие KeyPress. Дело в том, что если клавиша соответствует коду символа, то к этим двум событиям в очереди сообщений добавляется событие KeyPress. Обрабатывая событие KeyUP, ты можешь затирать те нажатия, которые тебе и не предназначались. Кроме того, если человек нажал клавишу и не отпускает, событие KeyUP не генерируется, зато символов одинаковых генерируется хоть отбавляй.
Кстати, это ты в Аксессе пишешь? Ежели что, спрашивай, чем можем, поможем.
- Seaman
- Пользователь
- Сообщения: 197
- Зарегистрирован: 21 фев 2003, 13:26
- Откуда: Ессентуки-Нврск-СПб-Торонто