Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > Ограничение вводимых значений в компонент Text


Автор: olga90 3.3.2008, 15:01
Мне для текстового компонента Text нужно задать следующюю маску:

ХХ.ХХ.У

где ХХ должны принимать значения 0-20
а У только букву "а", "б", "в" или "р"

как это реализовать? СТОРОННИЕ компоненты не предлагать - нужно именно на стандартном Text

Автор: Akina 3.3.2008, 16:27
Обработайте его KeyPress, обнуляя неправильный ввод

Автор: olga90 4.3.2008, 08:37
дайте пожалуйста пример

Автор: Akina 4.3.2008, 09:12
А поиском пользоваться религиЯ не позволяет? ну например http://forum.vingrad.ru/forum/topic-45058.html

Автор: olga90 5.3.2008, 14:06
Код

Dim Condition As Boolean

Private Sub CommandButton1_Click()
    Condition = TextBox1.Text Like "##.##[а,б,в,р]"
    If Condition Then MsgBox "ДА" Else MsgBox "НЕТ"
End Sub



если пишу 12.10а, то выдается ДА но если 4.15а или 2.12 то выдает НЕТ 

а мне нужно ХХ.ХХ.У, где ХХ должны принимать значения 0-20, а У только букву "а", "б", "в" или "р"

как быть?

Автор: Akina 5.3.2008, 15:32
Например
Код

Condition = (TextBox1.Text Like "##.##.[абвр]") OR (TextBox1.Text Like "#.##.[абвр]")

Автор: olga90 6.3.2008, 08:25
а как чтобы ## было можно вводить числа в диапозоне 0-20 ?

Автор: Akina 6.3.2008, 09:46
Никак. Возможности Like в этом отношении очень ограничены. Можете попробовать использовать RegExp.Match - вот у него таких ограничений нет.

Автор: olga90 7.3.2008, 20:25
Цитата(Akina @  6.3.2008,  07:46 Найти цитируемый пост)
 Можете попробовать использовать RegExp.Match - вот у него таких ограничений нет.

а как это реализуется через регулярные выражения. Как там это делается. Я такое первый раз слышу

Автор: Akina 7.3.2008, 23:42
Отправляйтесь в MSDN (если есть - в локальный), в раздел по VBScript, там найдите объект RegExp и проштудируйте описание его свойства Pattern. Потом посмотрите примеры.

Автор: olga90 8.3.2008, 11:52
спасибо

Автор: mihanik 12.3.2008, 20:50
Посмотри это...

Может, поможет...

Код

'********************************************************************
'* Модуль, организующий работу с объектом RegExp.
'* Организованы несколько глобальных переменных,
'* хранящих все режимы работы приведённых здесь функций и процедур.
'*
'********************************************************************

Option Explicit



Global MyRegExpPattern As String
Global MyRegExpMultiLine As Boolean
Global MyRegExpGlobal As Boolean
Global MyRegExpIgnoreCase As Boolean


'********************************************************************
'*
'* Процедура : SetRegExpProperties
'* Описание  : Устанавливает начальные значения объекта MyRegExp
'*  Вход     :
'*  Выход    : Нет
'********************************************************************
Private Sub SetRegExpProperties(ByRef MyRegExp As Object)

    MyRegExp.Pattern = MyRegExpPattern
    MyRegExp.MultiLine = MyRegExpMultiLine
    MyRegExp.Global = MyRegExpGlobal
    MyRegExp.IgnoreCase = MyRegExpIgnoreCase
    
End Sub


'********************************************************************
'*
'* Функция  : blnTestString (приватная)
'* Описание : Определяет соответствует ли строка шаблону
'* Вход     : strString - строка
'*            strPath   - шаблон (регулярное выражение)
'* Выход    : true - соответствует шаблону; false - не соответствует шаблону
'*
'********************************************************************
Private Function blnTestString(ByVal strString As String, ByVal strPath As String) As Boolean

Dim RegEx As Object

' Создаём экземпляр объекта RegExp
    Set RegEx = CreateObject("VBScript.RegExp")

' Настраиваем режимы работы регулярного выражения
    RegEx.IgnoreCase = True ' Осуществляем поиск игнорируя размер букв
    RegEx.Global = False    ' Ищем до первого совпадения
    RegEx.MultiLine = False ' Текст не является многострочным
    RegEx.Pattern = strPath ' Устанавливаем шаблон регулярного выражения
  
' Тестируем строку на соответствие шаблону
    blnTestString = RegEx.Test(strString)

' Уничтожаем экземпляр объекта RegExp
    Set RegEx = Nothing

End Function

'********************************************************************
'*
'* Функция  : strExtractString (приватная)
'* Описание : Выделяет из строки подстроку, удовлетворяющую шаблону
'* Вход     : strString - строка
'*            strPath   - шаблон
'* Выход    : строка соответствущая шаблону
'*
'********************************************************************
Private Function strExtractString(ByVal strString As String, ByVal strPath As String) As String
Dim RegEx As Object         ' Экземпляр регулярного выражения
Dim colMatches  As Object   ' Коллекция совпадений
Dim aMatch As Object        ' один из совпавших образцов

' Создаём экземпляр объекта RegExp
    Set RegEx = CreateObject("VBScript.RegExp")

' Настраиваем режимы работы регулярного выражения
    RegEx.IgnoreCase = True ' Осуществляем поиск игнорируя размер букв
    RegEx.Global = False    ' Ищем до первого совпадения
    RegEx.MultiLine = False ' Текст не является многострочным
    RegEx.Pattern = strPath ' Устанавливаем шаблон регулярного выражения
  
' Тестируем строку на соответствие шаблону
    Set colMatches = RegEx.Execute(strString)
    For Each aMatch In colMatches
        strExtractString = aMatch.Value
        Exit For
    Next

' Уничтожаем экземпляры объектов
    Set colMatches = Nothing
    Set RegEx = Nothing

End Function



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)