Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Ограничение ввода знаков в поле
 
 автор: Maksimilian   (14.05.2010 в 10:14)   личное сообщение
 
 

Здравствуйте! Как можно автоматизировать ограничение вводимых знаков в поле формы?
Я делаю так:

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 полей - для каждого поля писать такую "байду" - места много займет.

  Ответить  
 
 автор: час   (14.05.2010 в 10:48)   личное сообщение
 
 

Канешна можно
Попробуйте вот так

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

  Ответить  
 
 автор: kot_k_k   (14.05.2010 в 11:56)   личное сообщение
 
 

судя по всем у изобретаем велосипед.
У Поля есть свойство "Формат поля" - если оно пустое можно писать что угодно если выбран один из числовых форматов то при вводе букв и нажатии ентер заорет об ошибке.
Если не навится стандартное собщение - ловим ошибку и пишем свой текст - типа идиёт убери буквы.

  Ответить  
 
 автор: Lukas   (14.05.2010 в 12:07)   личное сообщение
4 Кб.
 
 

А вот мой лисапед =>

  Ответить  
 
 автор: час   (14.05.2010 в 12:33)   личное сообщение
 
 

Красивый

  Ответить  
 
 автор: час   (14.05.2010 в 12:33)   личное сообщение
 
 

идиёт убери буквы

  Ответить  
 
 автор: kot_k_k   (14.05.2010 в 12:52)   личное сообщение
 
 

акак назвать чела который в поле ЦЕНА пишет "пять" а не 5,00?

  Ответить  
 
 автор: час   (14.05.2010 в 13:01)   личное сообщение
 
 

Децибилл

  Ответить  
 
 автор: AlexSyr   (14.05.2010 в 13:48)   личное сообщение
 
 

А я для себя использую:

'Проверяет введенное в текстовое поле (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 в 14:36)   личное сообщение
 
 

Крута это ему сгодиться
тока где он ???

  Ответить  
 
 автор: kot_k_k   (14.05.2010 в 14:54)   личное сообщение
 
 

а как поведет себя функция если туда Вставить что-то а не вводить посимвольно

п.с. а можно написть функцию проверки - что вводимые знаки вводятся с клавиатуры у которой разъем PS/2 а не USB, и не упаси бог не DIN.

  Ответить  
 
 автор: AlexSyr   (14.05.2010 в 17:14)   личное сообщение
 
 

Событие Change отработает - предупреждение выдаст
Ну я же сказал, что для себя Кому нужно - доработает или найдет более красивое решение. Кроме того, всегда существует компромисс между простотой понимания, простотой реализации и достигнутого эффекта. Я просто поделился как мне видится решение заданного вопроса.
Кстати, можно и каменным топором выбивать буковки в "текстовом поле"

  Ответить  
 
 автор: час   (14.05.2010 в 17:56)   личное сообщение
 
 

Кстати, можно и каменным топором 

Неа - монитор не выдержит

  Ответить  
 
 автор: kot_k_k   (14.05.2010 в 18:57)   личное сообщение
 
 

у него монитор каменный

  Ответить  
 
 автор: час   (14.05.2010 в 19:45)   личное сообщение
 
 

Тада базара нету

  Ответить  
 
 автор: Maksimilian   (14.05.2010 в 21:29)   личное сообщение
 
 

На счет формата.. может я торможу.. но я не нашел, что бы он запрещал ввод определенных символов.


автор: час (14.05.2010 в 10:48)
Канешна можно
Попробуйте вот так...


А из других полей как обращаться?
Если у меня есть поля допустим
Глубина
Влажность и т д

  Ответить  
 
 автор: час   (14.05.2010 в 22:08)   личное сообщение
 
 

Шютнык
Глубина, влажность, температура, возбуждённость, просвет...........

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, Глубина)

  Ответить  
 
 автор: Lukas   (14.05.2010 в 22:46)   личное сообщение
21 Кб.
 
 

Очередной лисапед от меня =>
: )

  Ответить  
 
 автор: kot_k_k   (15.05.2010 в 12:16)   личное сообщение
 
 

господи!!! ну когда, когда я пойму классы????

  Ответить  
 
 автор: Господь   (15.05.2010 в 22:29)   личное сообщение
 
 

А тебе это надо, сын мой?

  Ответить  
 
 автор: kot_k_k   (17.05.2010 в 08:44)   личное сообщение
 
 

молится негритенок:
- Господи ну почему я черный
Бог ему
- иначе жаркое солышко Африки опалило тебя, дитя мое.
- ну почему я такой кучерявый
- иначе жаркое солышко Африки убило бы тебя, дитя мое.
- господи, так какого ж хера я родился в Саратове!!!!!!!

  Ответить  
 
 автор: Maksimilian   (15.05.2010 в 10:58)   личное сообщение
 
 

Вот смотрю я на то, что вы тут предлагаете и понимаю - мало я понимаю в программировании, книжки умные читать надо). Спасибо за помощь!

  Ответить  
 
 автор: akkorn   (15.05.2010 в 14:32)   личное сообщение
 
 

Ну и я внесу свою лепту...
Зачем такие сложности, что предлагались в этой ветке)
После каждого ввода, либо по кнопке "Проверить" проверяем введенные символы..

Вот ф-ция, которая позволяет Оставить РАЗРЕШЕННЫЕ символы, либо Запрещающая определенные символы. Определяете нужные, и через эту ф-цию фильтруете значение поля... )))

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

  Ответить  
 
 автор: час   (18.05.2010 в 22:00)   личное сообщение
 
 

И я лепту:

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

  Ответить  
 
 автор: akkorn   (18.05.2010 в 22:14)   личное сообщение
 
 

Сергей Саныч

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList