Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: www.hypertech.ru
 Профиль | | #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 какие-то :))

Гораздо проще сделать так:

SetWindowLong NumText.hwnd, GWL_STYLE, GetWindowLong(NumText.hwnd, GWL_STYLE) Or ES_NUMBER


И кроме цифр ничего восприниматься не будет, в том числе и запятая, так что парится не надо, думая, 10 или 100

Ответить

Номер ответа: 7
Автор ответа:
 boevik



Хранитель чата

ICQ: 137392264 

Вопросов: 8
Ответов: 557
 Web-сайт: www.hypertech.ru
 Профиль | | #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-сайт: www.hypertech.ru
 Профиль | | #10
Добавлено: 14.11.04 17:13
Имелось ввиду event Validate
К примеру так:
Private Sub MaskEdBox1_Validate(Cancel As Boolean)
If MaskEdBox1 > 299.01 And MaskEdBox1 < 24999.99 Then
    Cancel = False
Else
    MsgBox "Range: &#238;&#242; -299,01 &#228;&#238; 24999,99. "
    Cancel = True
End If
End Sub

Ответить

Номер ответа: 11
Автор ответа:
 boevik



Хранитель чата

ICQ: 137392264 

Вопросов: 8
Ответов: 557
 Web-сайт: www.hypertech.ru
 Профиль | | #11
Добавлено: 14.11.04 17:15
Message box выглядит так:
MsgBox "Range: from 299,01 to 24999,99. "

Ответить

Номер ответа: 12
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #12 Добавлено: 14.11.04 17:15
Просто в вопросе заметил, что разрешён ввод только целых чисел, и у тебя загвоздка в обработке запятой.

А для дробных значений вот набросал на скорую руку, позволяет вводить числа и знаки: запятую и точку. Точку преобразует в запятую (для удобства преобразования например в Currency). Повторный ввод запятой блокируется. Смотри, тестируй:

Private Sub TxtCount_KeyPress(KeyAscii As Integer)
    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'у уже не надо :))), то на всякий случай, может кому ещё понадобится: вариант, позволяющий :

а) ограничить вводимое число сверху и снизу
б) запретить ввод знака в середине числа
в) принимать разделитель как точку, так и запятую

Private Sub TxtCount_Change()
    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.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам