|
|
|
| Здравствуйте! Как можно автоматизировать ограничение вводимых знаков в поле формы?
Я делаю так:
Private Sub УдСопр_KeyPress(KeyAscii As Integer)
Select Case KeyAscii
Case 8, 48 To 57 ' <Backspace> и цифры
Case 44, 46 ' запятая (44) и точка (46)
If Len(УдСопр.Text) = 0 Then
' запятая не может быть первым сиволом
KeyAscii = 0
Else
If KeyAscii = 46 Then
' заменим точку запятой
KeyAscii = 44
End If
' проверим, введена ли запятая
If InStr(1, УдСопр.Text, ",") <> 0 Then
' запятая уже введена
' вторая не нужна
KeyAscii = 0
End If
End If
Case Else
' прочие символы запрещены
KeyAscii = 0
End Select
End Sub
|
Можно ли это все засунуть в одну функцию и потом ссылаться на нее из разных полей.
Просто если у меня 30 полей - для каждого поля писать такую "байду" - места много займет. | |
|
| |
|
|
|
| Канешна можно
Попробуйте вот так
Public Function УдСопр_KeyPress(KeyAsc As Integer, Str_Text as String ) As string
Dim Str_Return as string
Select Case KeyAscii
Case 8, 48 To 57 ' <Backspace> и цифры
Str_Return = str(KeyAsc)
Case 44, 46 ' запятая (44) и точка (46)
If Len(Str_Text ) = 0 Then
' запятая не может быть первым сиволом
Str_Return = ""
Else
If KeyAsc = 46 Then
' заменим точку запятой
Str_Return = ","
End If
' проверим, введена ли запятая
If InStr(1, УдСопр.Text, ",") <> 0 Then
' запятая уже введена
' вторая не нужна
Str_Return = ""
End If
End If
Case Else
' прочие символы запрещены
Str_Return = ""
End Select
УдСопр_KeyPress = Str_Return
End Sub
|
| |
|
| |
|
|
|
| судя по всем у изобретаем велосипед.
У Поля есть свойство "Формат поля" - если оно пустое можно писать что угодно если выбран один из числовых форматов то при вводе букв и нажатии ентер заорет об ошибке.
Если не навится стандартное собщение - ловим ошибку и пишем свой текст - типа идиёт убери буквы. | |
|
| |
|
4 Кб. |
|
| А вот мой лисапед => | |
|
| |
|
|
|
| Красивый | |
|
| |
|
|
|
|
| акак назвать чела который в поле ЦЕНА пишет "пять" а не 5,00? | |
|
| |
|
|
|
| Децибилл | |
|
| |
|
|
|
| А я для себя использую:
'Проверяет введенное в текстовое поле (ctlIN - ссылка на объект TextBox) значения на соответствие:
' WhatIN = Dig - цифрам
' Dec - цифрам (+ "."-точка и ","-запятая)
' Chr - буквам
' LenIN = MAX длина вводимой строки
' FormatIN = Upp - перевод строки в верхний регистр
' Lwr - перевод строки в нижний регистр
'Возвращает позицию указателя курсора
Public Function CheckInput(ctlIN, WhatIN, Optional LenIN, Optional FormatIN)
Dim strTmp As String
strTmp = Mid(ctlIN.Text, ctlIN.SelStart, 1)
'Если был удален первый элемент строки, то SelStart будет = 0, и ничего не проверяем
If ctlIN.SelStart <> 0 Then
'Проверка на длину строки
If IsMissing(LenIN) = False Then 'Задано значение длины
If Len(ctlIN.Text) > LenIN Then
Resp = MsgBox("В данное поле РАЗРЕШЕНО вводить" & vbCrLf & _
"ТОЛЬКО " & LenIN & " символ(а/ов)", vbCritical, "ОШИБКА")
'Именно сначала сохраняем позицию курсора, а затем изменяем значение поля
' Иначе позиция курсора собьется
CheckInput = ctlIN.SelStart - 1
ctlIN.Value = Mid(ctlIN.Text, 1, ctlIN.SelStart - 1) & Mid(ctlIN.Text, ctlIN.SelStart + 1)
Exit Function
End If
End If
'Проверка на Цифры/Буквы
If WhatIN = "Dig" Then 'Проверка на цифры
If IsNumeric(strTmp) = False Then
Resp = MsgBox("Можно вводить ТОЛЬКО ЦИФРЫ", vbCritical, "ОШИБКА")
CheckInput = ctlIN.SelStart - 1
ctlIN.Value = Mid(ctlIN.Text, 1, ctlIN.SelStart - 1) & Mid(ctlIN.Text, ctlIN.SelStart + 1)
Else
CheckInput = ctlIN.SelStart
End If
ElseIf WhatIN = "Dec" Then 'Проверка на цифры (+ "."-точка и ","-запятая)
If IsNumeric(strTmp) = False And strTmp <> "." And strTmp <> "," Then
Resp = MsgBox("Можно вводить ТОЛЬКО ЦИФРЫ, ТОЧКУ или ЗАПЯТУЮ", vbCritical, "ОШИБКА")
CheckInput = ctlIN.SelStart - 1
ctlIN.Value = Mid(ctlIN.Text, 1, ctlIN.SelStart - 1) & Mid(ctlIN.Text, ctlIN.SelStart + 1)
Else
CheckInput = ctlIN.SelStart
End If
ElseIf WhatIN = "Chr" Then 'Проверка на буквы
If IsNumeric(strTmp) = True Then
Resp = MsgBox("Можно вводить ТОЛЬКО БУКВЫ", vbCritical, "ОШИБКА")
CheckInput = ctlIN.SelStart - 1
ctlIN.Value = Mid(ctlIN.Text, 1, ctlIN.SelStart - 1) & Mid(ctlIN.Text, ctlIN.SelStart + 1)
Else
CheckInput = ctlIN.SelStart
'Форматирование строки
If IsMissing(FormatIN) = False Then 'Задано значение форматирования
If FormatIN = "Upp" Then 'Перевод в верхний регистр
ctlIN.Value = StrConv(ctlIN.Text, vbUpperCase)
ElseIf FormatIN = "Lwr" Then 'Перевод в нижний регистр
ctlIN.Value = StrConv(ctlIN.Text, vbLowerCase)
End If
End If
End If
End If
End If
End Function
|
И вызов:
Private Sub TextFld_Change()
'Проверяем введенное значение на цифру и длину 3 знака
Me.TextFld.SelStart = CheckInput(Me.TextFld, "Dig", 3)
End Sub
|
Кому как, а мне так удобнее | |
|
| |
|
|
|
| Крута это ему сгодиться
тока где он ??? | |
|
| |
|
|
|
|
|
|
|
| Тада базара нету | |
|
| |
|
|
|
| На счет формата.. может я торможу.. но я не нашел, что бы он запрещал ввод определенных символов.
автор: час (14.05.2010 в 10:48)
Канешна можно
Попробуйте вот так...
|
А из других полей как обращаться?
Если у меня есть поля допустим
Глубина
Влажность и т д | |
|
| |
|
|
|
| Шютнык
Глубина, влажность, температура, возбуждённость, просвет...........
Public Function FUN_KeyPress(KeyAsc As Integer, Str_Text as String ) As string
Dim Str_Return as string
Select Case KeyAscii
Case 8, 48 To 57 ' <Backspace> и цифры
Str_Return = str(KeyAsc)
Case 44, 46 ' запятая (44) и точка (46)
If Len(Str_Text ) = 0 Then
' запятая не может быть первым сиволом
Str_Return = ""
Else
If KeyAsc = 46 Then
' заменим точку запятой
Str_Return = ","
End If
' проверим, введена ли запятая
If InStr(1, Str_Text, ",") <> 0 Then
' запятая уже введена
' вторая не нужна
Str_Return = ""
End If
End If
Case Else
' прочие символы запрещены
Str_Return = ""
End Select
FUN_KeyPress = Str_Return
End Sub
|
обращение к функции - как то так:
в событии (KeyPress) - поля (Моё_поле)
Моё_поле = Моё_поле & FUN_KeyPress(KeyAscii, Моё_поле)
Глубина=Глубина & FUN_KeyPress(KeyAscii, Глубина)
|
| |
|
| |
|
21 Кб. |
|
| Очередной лисапед от меня =>
: ) | |
|
| |
|
|
|
| господи!!! ну когда, когда я пойму классы???? | |
|
| |
|
|
|
| А тебе это надо, сын мой? | |
|
| |
|
|
|
| молится негритенок:
- Господи ну почему я черный
Бог ему
- иначе жаркое солышко Африки опалило тебя, дитя мое.
- ну почему я такой кучерявый
- иначе жаркое солышко Африки убило бы тебя, дитя мое.
- господи, так какого ж хера я родился в Саратове!!!!!!!
| |
|
| |
|
|
|
| Вот смотрю я на то, что вы тут предлагаете и понимаю - мало я понимаю в программировании, книжки умные читать надо). Спасибо за помощь! | |
|
| |
|
|
|
| Ну и я внесу свою лепту...
Зачем такие сложности, что предлагались в этой ветке)
После каждого ввода, либо по кнопке "Проверить" проверяем введенные символы..
Вот ф-ция, которая позволяет Оставить РАЗРЕШЕННЫЕ символы, либо Запрещающая определенные символы. Определяете нужные, и через эту ф-цию фильтруете значение поля... )))
Function StrFilter(Optional strText As String, Optional Filter1 As String) As String
'================================================================
' Фильтрация содержимого strText
'
' MsgBox StrFilter("369-76 =-97", Chr$(0) & "1234567890") =3697697
' MsgBox StrFilter("369-76 =-97", Chr$(1) & "1234567890") =- ?-
' Первый символ переменной Filter$ - код операции, остальные символы - перечень допустимых/НЕдопустимых символов
' =0 - удаление всех символов из strText, кроме указанных в списке (допустимых)
' =1 - удаление всех символов из strText, указанных в списке (НЕдопустимых)
'===============================================================
On Error GoTo End01
If Len(strText) = 0 Or Len(Filter1) = 0 Then GoTo End01
Dim Temp As String, CodeFilter As Integer, i As Long, Sym As String
Temp = "": CodeFilter = Asc(Filter1)
For i = 1 To Len(strText)
Sym = Mid$(strText, i, 1)
If (Sgn(InStr(2, Filter1, Sym)) Xor CodeFilter) <> 0 Then
Temp = Temp & Sym
End If
Next i
StrFilter = Temp
End01:
End Function | |
|
| |
|
|
|
| И я лепту:
Function LimitTextInput(source) As String
' пример вызова
'Private Sub Text1_KeyPress(KeyAscii As Integer)
'KeyAscii = LimitTextInput(KeyAscii)
'End Sub
Const Numbers$ = "0123456789." ' эти символы разрешены
' backspace = 8
If source <> 8 Then
If InStr(Numbers, Chr(source)) = 0 Then
LimitTextInput = 0
Exit Function
End If
End If
LimitTextInput = source
End Function
|
| |
|
| |
|
|
|
| Сергей Саныч | |
|
| |