singlepost

Контроль ввода << На главную или назад  

Здравствуйте!
я столкнулся со следующей проблемой – мне нужно чтоб в компонент CEdit можно было ввести число типа double, а ввод остальных символов – блокировать… подскажите, плиз, как это реализовать
среда – MS VS 2005

9 ответов в теме “Контроль ввода”

  1. 9
    Денис Гублин ответил:

    построить конечный автомат
    мааааааленькая табличка – и дело в шляпе
    и шаблон потом пригодится
    самый натуральный и естественный способ решения такой задачи

  2. 8
    Артём Шалхаков ответил:

    Я тут подумал, что онлайн-парсер тут не нужен, потому что строка все равно короткая. Хватит даже сравнения с регулярным выражением.

  3. 7
    Павел Потапов ответил:

    Особый экстрим – поддержать региональные символы. Ибо там, в дань традиции, тысячные и десятичные разделители могут состоять аж из 3х символов ;)

  4. 6
    Артём Шалхаков ответил:

    Есть два более-менее подходящих способа:
    - один по Раскину
    - один не по Раскину

    Второй заключается в блокировании неугодных клавиш при наборе текста пользователем, первый же должен как-то немодально (modeless) сигнализировать пользователю, что тот вбивает ахинею.

    Оба этих способа, если их реализовывать "правильно" (кошерно, православно, etc.) подразумевают построение онлайн-парсера (on-line/incremental parser). Собственно, информация по таким парсерам не является большой тайной, и отлично ищется в гугле.

  5. 5
    Женя Гаврилов ответил:

    Можно проверять при вводе или при считывании числа, есть ли в нем десятичная часть, т.е. точка или запятая, отделяющая целую часть от дробной!

  6. 4
    Vlad Ламбар ответил:

    хм…кажется была…ну не знаю, давно это было…тогда просто в
    событии OnChar, проверяй что бы были только цифры и "." или ","

    дальше дело техники )

    или так: создаешь переменную m_iNumericData типа double в класе формы, а потом кажется такое в DoDataExchange:

    DDX_Text(pDX, IDC_MYEDIT, m_iNumericData), но я не уверен…

    а можешь создать регексп-строку такого формата как надо, а потом в какой-то момент проверять с тем что ввели…это поможет и при вставке с буфера в эдит…

    посмотреть увы не могу, так как студии нету в даный момент )))

  7. 3
    Леша Губарев ответил:

    #2
    нет, С++

    #3
    нету там маски… ну по крайней мере я не нашел…

  8. 2
    Vlad Ламбар ответил:

    CEdit это кажется MFC'шный класс…
    Посмотри в свойствах объекта…там должно быть что-то типа маски…

  9. 1
    Кирилл Быков ответил:

    C#?

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.