Страницы: 1
RSS
Маска ввода для TextBox
 
Здравствуйте! Прошу помощи.

В текстовом поле TextBox необходимо использовать маску для ввода, чтобы уменьшить вероятность ошибки ввода данных.
Вводимые значения могут быть как вида ####-## (например 1234-56), так и #####-## (например 12345-67).
Вводятся только цифры.
Возможно ли это реализовать?

Дополнение: первая цифра не может быть 0

Спасибо
Изменено: Artem1977 - 28.02.2017 12:12:34 (дополнение условия)
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
 
Тестируйте :D
 
Спасибо. Но возможно ввести только четырёхзначное число перед дефисом. А оно может быть и пятизначным
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
 
Я думаю  можно, посмотрите код . Надо пару изменений сделать.
Все бегу на работу.
 
Спасибо огромное!!!
Только у меня это не получится(((
Слаб ещё в познаниях)))
Изменено: Artem1977 - 28.02.2017 07:59:23 (добавление текста)
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
 
Цитата
Artem1977 написал: Но возможно ввести только четырёхзначное число перед дефисом. А оно может быть и пятизначным
а как вы представляете себе логику, по которой компьютер должен понять "оно у вас будет 5значное или 4значное"?..
p.s.
логика кода - считает количество символов после очередного нажатия на клавиатуру. как ему вас понять - после 4-го символа будет 5-й или нет?..
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Вариант: проверять при окончании редактирования (событие Exit) количество символов до дефиса: если < 4 или > 5 - поднимать крик )
 
Пока как-то примерно так.
Варианта контролировать меньше шести цифр пока не придумал.
Следствие из третьего закона Чизхолма:
"Даже если ясность изложения исключает неверное толкование, все равно найдется кто-то, кто поймет Вас неправильно."
 
Цитата
необходимо использовать маску для ввода, чтобы уменьшить вероятность ошибки ввода данных
если контролировать что вводится, то вероятность ошибки нужно не минимизировать, а ИСКЛЮЧИТЬ!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Perfect2You написал: Пока как-то примерно так.
Это даже лучше чем я мог предположить! Огромное спасибо!!!

Ну а логика... Повторюсь. Пользователь вводит только цифры. Если он ввёл 123456, то оно должно приобрести вид 1234-56. Если пользователь продолжил ввод и добавил цифру 7, т.е. ввёл 1234567 то должно приобрести вид 12345-67.

Вариант Perfect2You меня более чем устраивает. Спасибо!!!
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
 
Perfect2You а можно чтобы контролировался первый вводимый символ? Он не может быть равен нулю. Ну и разрешение для клавиши <Delete>      
Изменено: Artem1977 - 01.03.2017 05:19:27 (ошибочные сведения)
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
 
Добавьте в код
Скрытый текст
 
Да, это то что надо!!!
Спасибо всем откликнувшимся
Особенная благодарность Logistic, Perfect2You,  и Маугли
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
 
Код
Private Sub TextBox1_Change()
    Dim s&
    If Len(TextBox1.Text) Then
        s = CLng(Replace(TextBox1.Text, "-", ""))
        If Len(CStr(s)) > 2 Then
            TextBox1.Text = Format(s, "0-00")
        Else
            TextBox1.Text = s
        End If
    End If
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Select Case Len(TextBox1.Text)
    Case 1 To 6
        MsgBox "Маловато будет!", vbExclamation
    Case Is > 8
        MsgBox "Куда разогнался! TextBox треснет!", vbExclamation
    Case Else
        Exit Sub
    End Select
    With TextBox1
        .SelStart = 0: .SelLength = Len(.Text)
    End With
    Cancel = True
End Sub
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
    Case 48 To 57
    Case Else
        KeyAscii = 0
    End Select
End Sub
 
Доработал с событиями. Теперь и короткое заставляет довводить - не дает выйти.
Выход либо с требуемым форматом, либо по клавише Esc.
Следствие из третьего закона Чизхолма:
"Даже если ясность изложения исключает неверное толкование, все равно найдется кто-то, кто поймет Вас неправильно."
 
Великолепно!!!
Особо такой контроль и не требовался :D :D :D
  Спасибо огромнейшее!!!!!!
Microsoft Office 2010 64-bit, Windows 10 Professional 64-bit
Страницы: 1
Наверх