Страница 1 из 1
Простой вопрос по VB6
Добавлено: 05 июл 2004, 11:51
Seaman
Нужно ограничить вводимые через TextBox значки в VB6 аппликации шестнадцатиричными значениями (0 ... F). Как можно организовать проверку на "вшивость" в данном случае, чтобы выдать пользователю ошибку в MsgBox в случае, если он ввел что-то не дозволенное?
Кто подскажет, есть-ли что нибудь такое в VB6? Должно быть, по идее, но не могу найти или не то ищу (не знаю, что искать). Подскажите, братцы.

Re: Простой вопрос по VB6
Добавлено: 06 июл 2004, 11:28
Vitaliy-2000
Seaman писал(а):Нужно ограничить вводимые через TextBox значки в VB6 аппликации шестнадцатиричными значениями (0 ... F). Как можно организовать проверку на "вшивость" в данном случае, чтобы выдать пользователю ошибку в MsgBox в случае, если он ввел что-то не дозволенное?
Кто подскажет, есть-ли что нибудь такое в VB6? Должно быть, по идее, но не могу найти или не то ищу (не знаю, что искать). Подскажите, братцы.

точно есть
такое уже писано переписано. общая идея такая что надо ловить "киипресы" и смотреть введеный код
поищи в инете - примеров тьма тьмущая
Добавлено: 06 июл 2004, 12:08
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

Не особо сложно-ли, может что по-проще есть?
А ловить "кей", думаю будет тоже самое.
Добавлено: 06 июл 2004, 15:37
папа Карло
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

Не особо сложно-ли, может что по-проще есть?
А ловить "кей", думаю будет тоже самое.
KeyUp event надо ловить и чар его обрабатывать....
Добавлено: 06 июл 2004, 22:26
Vitaliy-2000
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
...

Не особо сложно-ли, может что по-проще есть?
А ловить "кей", думаю будет тоже самое.
Вот смотри: ты сначала позволил юзеру ввести все что он хочет. Он радостный такой, особливо на фоне того что есть подпись вводить токма шешнадцатиричные символы, а он такой моодца смог ввести что захотел.. потом он кликает.. читает твой мессаджбокс, нажимает на нем пидаль ок, опять идет вводить/править текст
а нуно ИМХО делать так что он НЕ может ввести ничего что выпадает из ряда. шагов по вводу будет сильно меньше -> меньше глюков -> проще дальнейший апдейт
Добавлено: 08 июл 2004, 07:39
Seaman
Моя проблема в том только, на данный момент, что я не знаю как избавиться в таком случае от следующего бага:
Чтобы исключить всякие инсинуации со стороны "умного" юзера, который пожелает ввести строку не заглавными, а строчными буквами, я дожидаюсь окончания ввода строки и на lostfocus перекидываю все буквы в upper case. Если я делаю это на keyup, то после перевода буквы в upper case, курсор возвращается в начало строки, чего нам не надо
Можно, конечно, добавить эти 6 буковок нижнего регистра в аррэй разрешенных значков и переводить их в верхний регистр после того как, но правильное ли это решение вопроса?

Добавлено: 08 июл 2004, 08:09
Seaman
Вот сделал так:
Код: Выделить всё
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:
Добавлено: 08 июл 2004, 08:39
Seaman
О.К. додумался:

Какой я вумный! Ну прям як вутка!
Добавлено: 18 июл 2004, 09:05
tasko
Seaman писал(а):О.К. додумался:

Какой я вумный! Ну прям як вутка!
Ну вот видишь? Если долго мучится, что-нибудь получится.
Однако я бы не ловил событие KeyUP. Лучшим решением является событие KeyPress. Дело в том, что если клавиша соответствует коду символа, то к этим двум событиям в очереди сообщений добавляется событие KeyPress. Обрабатывая событие KeyUP, ты можешь затирать те нажатия, которые тебе и не предназначались. Кроме того, если человек нажал клавишу и не отпускает, событие KeyUP не генерируется, зато символов одинаковых генерируется хоть отбавляй.
Кстати, это ты в Аксессе пишешь? Ежели что, спрашивай, чем можем, поможем.
Добавлено: 18 июл 2004, 09:50
Seaman
Нет, это чисто VB6, генератор кода для регистрации продукта.
Однако спасибо за предложение.