Страница: 1 | 2 |
Вопрос: Нужен совет
Добавлено: 14.11.04 10:42
Автор вопроса: Mihalыch | ICQ: 373-509-101
Подскажите, а то голова уже не варит… С утра делаю процедуру контроля числового ввода. Ну типа чтоб нельзя было ввести нечисловые символы или значение вне указанного диапазона и т.д. Каждый наверно делал. А вот сам глупый вопрос: допустим, разрешен ввод только целых чисел, число 100 уже введено, после этого пользователь делает так 10,0 че надо оставить 100 или 10?
Ответы
Всего ответов: 21
Номер ответа: 1
Автор ответа:
boevik
Хранитель чата
ICQ: 137392264
Вопросов: 8
Ответов: 557
Web-сайт:
Профиль | | #1
Добавлено: 14.11.04 12:14
А не проще ли использовать MaskEdBox и задать ему маску?
Номер ответа: 2
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #2
Добавлено: 14.11.04 12:23
Че такое MaskEdBox? ActiveX какой-то? Где взять?
Номер ответа: 3
Автор ответа:
Black Dragon
ICQ: 321186096
Вопросов: 30
Ответов: 347
Web-сайт:
Профиль | | #3
Добавлено: 14.11.04 13:23
MaskEdBox ActiveX Control входит в стандартную поставку VB 6.0. Называется:
"Microsoft Masked Edit Control 6.0". Посмотри.
Номер ответа: 4
Автор ответа:
Black Dragon
ICQ: 321186096
Вопросов: 30
Ответов: 347
Web-сайт:
Профиль | | #4
Добавлено: 14.11.04 13:25
А так: 10.0 - это же все-таки 10 с дробной нулевой частью. А если пользователь вводит дробное число, то через ф-цию CInt сделай его целым (причем Int - отбрасывание дробной части; CInt - округление до целых).
Номер ответа: 5
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #5
Добавлено: 14.11.04 15:16
Прикольная штучка. Подскажите, как можно в MaskEdBox задать диапазон, разрешенный для ввода, например от -299,01 до 24999,99.
Номер ответа: 6
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #6
Добавлено: 14.11.04 15:42
Ну вот, сразу ActiveX какие-то )
Гораздо проще сделать так:
И кроме цифр ничего восприниматься не будет, в том числе и запятая, так что парится не надо, думая, 10 или 100
Номер ответа: 7
Автор ответа:
boevik
Хранитель чата
ICQ: 137392264
Вопросов: 8
Ответов: 557
Web-сайт:
Профиль | | #7
Добавлено: 14.11.04 16:32
Проверяй на Validate или попадает в разрешенный диапазон.
Номер ответа: 8
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #8
Добавлено: 14.11.04 16:34
cresta, при всем уважении, а если нужно разрешить ввод дробных чисел? Неужели нет универсального решения?
Номер ответа: 9
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #9
Добавлено: 14.11.04 16:58
boevik, я и так смотрел и эдак но серавно не понял что ты хотел сказать. Если про функцию Val() так она с запятыми не дружит. Нет, запятую конечно можно заменить на точку, но я так понял, все ответы сводятся к тому, что не чего париться со своей процедурой, а лучше воспользоваться готовыми решениями.
А если я неверно тебя понял (про Val()), поясни, пожалуйста
Номер ответа: 10
Автор ответа:
boevik
Хранитель чата
ICQ: 137392264
Вопросов: 8
Ответов: 557
Web-сайт:
Профиль | | #10
Добавлено: 14.11.04 17:13
Имелось ввиду event Validate
К примеру так:
If MaskEdBox1 > 299.01 And MaskEdBox1 < 24999.99 Then
Cancel = False
Else
MsgBox "Range: îò -299,01 äî 24999,99. "
Cancel = True
End If
End Sub
Номер ответа: 11
Автор ответа:
boevik
Хранитель чата
ICQ: 137392264
Вопросов: 8
Ответов: 557
Web-сайт:
Профиль | | #11
Добавлено: 14.11.04 17:15
Message box выглядит так:
Номер ответа: 12
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #12
Добавлено: 14.11.04 17:15
Просто в вопросе заметил, что разрешён ввод только целых чисел, и у тебя загвоздка в обработке запятой.
А для дробных значений вот набросал на скорую руку, позволяет вводить числа и знаки: запятую и точку. Точку преобразует в запятую (для удобства преобразования например в Currency). Повторный ввод запятой блокируется. Смотри, тестируй:
Dim Numb As Long
If KeyAscii = 46 Or KeyAscii = 44 Then
If InStr(1, TxtCount.Text, "," Then
KeyAscii = 0
Else
KeyAscii = 44
End If
End If
If (KeyAscii < 48 Or KeyAscii > 57) _
And KeyAscii <> 8 And KeyAscii <> 44 _
And KeyAscii <> 46 Then
KeyAscii = 0
End If
End Sub
Если запятые не нужны, удали их обработку, оставь только цифры
Номер ответа: 13
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #13
Добавлено: 14.11.04 17:29
Всем спасибо!
Номер ответа: 14
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #14
Добавлено: 14.11.04 18:03
Неужели нет универсального решения?
Мдя, раз Mihalыch'у уже не надо )), то на всякий случай, может кому ещё понадобится: вариант, позволяющий :
а) ограничить вводимое число сверху и снизу
б) запретить ввод знака в середине числа
в) принимать разделитель как точку, так и запятую
On Error GoTo err
If CDbl((TxtCount.Text)) < -299.01 Or CDbl((TxtCount.Text)) > 24999.99 Then
MsgBox "From -299.01 To 24999.99"
TxtCount = Left$(TxtCount, Len(TxtCount) - 1)
TxtCount.SelStart = Len(TxtCount)
End If
err:
End Sub
Private Sub TxtCount_KeyPress(KeyAscii As Integer)
If KeyAscii = 46 Or KeyAscii = 44 Then
If InStr(1, TxtCount.Text, "," Then
KeyAscii = 0
Else
KeyAscii = 44
End If
End If
If KeyAscii = 45 And Len(TxtCount) <> 0 Then KeyAscii = 0
If (KeyAscii < 48 Or KeyAscii > 57) And KeyAscii <> 8 And KeyAscii <> 44 Then
KeyAscii = 0
End If
End Sub
Номер ответа: 15
Автор ответа:
Mihalыch
ICQ: 373-509-101
Вопросов: 56
Ответов: 330
Профиль | | #15
Добавлено: 15.11.04 02:11
2cresta, конечно надо, но не все же чужими руками делать. Только для полной универсальности я еще добавил бы проверку содержимого текстового поля в цикле. Ведь есть такие штуки как Copy/Paste.