number only text box

Тема в разделе "WASM.WIN32", создана пользователем infern0, 15 дек 2004.

  1. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    Что-то я не понимаю - надо ограничить ввод в text box только чисел с несколькими знаками после запятой. Если поставить свойство numbers то не позволяет ввести запятую. Если обрабатывать каждую нажатую клавишу то проблемы с тем что можно несколько запятых ввести и т.п. Есть красивое решение ?
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Сабклассить (сабклассировать?) контрол.

    Допустимые символы: 0-9 + '.'.

    А насколько красивым будет решение, так это от разработчика зависит…
     
  3. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    Просто разрешить точку - могут наставить несколько точек.

    Я писал подобную сабклассирующую процедуру. Есть IMHO на MadWizard сайте в снипетах.
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Нет, ну понятно, что надо хранить флаг, что точка уже есть. Можно у себя, можно через Set/GetWindowLong.
     
  5. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    infern0



    После каждого нажатия смотреть, есть ли среди введённых ранее запятая, если уже была - игнорировать последнюю введённую. Особых проблем в этом нет.



    P.S.

    Почему текст бокс, а не edit?
     
  6. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    гм... я думал это одно и тоже
     
  7. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    bogrus





    Это я пытаюсь втихаря выудить информацию, на каком ЯВУ (если на ЯВУ) пишется :)
     
  8. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    пишется на msvc / wtl :)

    ps: может ткнете в более-менее рабочий пример ?
     
  9. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia


    И отслеживать если её удалили при редактировании.

    А отслеживать удаление просто не получается - в отличии от впечатывания тебе ведь не сообщается какой символ удалили - приходится разбираться через сканирование или ещё как.

    Так что не сложно но и так уж просто чтобы быстро было.

    Особенно если изменения copy\paste делаются.

    допустим есть уже в edit

    1234.56 и курсор стоит после "6" в это время делается paste текста "7.8". Что делать? Что вообще тут должно быть результатом?

    1234.567?

    Отмена paste?

    1234.5678?
     
  10. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    The Svin

    не усложняй :)

    мне бы примерчик, для простоты запретим copy/paste.

    ps: разрешение проблем с copy/paste - вариант с аналогом maskedit из билдера. При маске ######.## никаких проблем с разрешением конфликтов нету. Может такое проще сделать ?
     
  11. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Зачем такие сложности? Садись на EN_CHANGE - бери техт через обычный GetWindowText и пропускай этот текст через фильтр, который возвратит TRUE/FALSE и если текст не то что надо - disable те контрольные окна, которыми нельзя пользоваться (кнопка ОК, например...)
     
  12. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    AsmGuru62

    нет, это фигня. Надо именно запретить ввод левых символов. А такая проверка у меня и сейчас есть.
     
  13. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Что-то я не понял что нужно.

    Нужно разрешить ввод чисел только с двумя(к примеру) знаками после запятой? А зачем такое понадобилось?
     
  14. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    мне нужно вносить денежные суммы в поля ввода.
     
  15. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    На codeproject.com, кажется было много всяких maskedit'ов
     
  16. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Тут самое сложное это именно отследить количество знаков после запятой и то место в которое вводится текущий символ, т.е. нужно получать положение курсора и текст из Edit'а, в буфере производить добавление символа в нужную позицию и проверять не нарушено ли условие о количестве знаков после запятой, и потом уже разрешать или запрещать ввод.

    Т.е. это Subclassing + небольшая тестирующая процедура..
     
  17. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    infern0

    Вот, как вариант, можно вводить 0-9 и '.', два знака после запятой..

    Если интересен могу выложить исходник, но мне самому пока что этот вариант не нравится.



    [​IMG] 1242136724__MaskedEdit.exe
     
  18. Foamplast

    Foamplast New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2003
    Сообщения:
    80
    Адрес:
    Russia
    Блин, чё вы паритесь, я делал проще простого:



    сабклассить контрол, после любого изменения текста просматривать весь и сообщать о первом неподходящем символе. Это в теории работет медленно, при этом на практике всё нормально.
     
  19. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    Foamplast

    > и сообщать о первом неподходящем символе



    Это не наш метод :derisive:
     
  20. infern0

    infern0 New Member

    Публикаций:
    0
    Регистрация:
    7 окт 2003
    Сообщения:
    811
    Адрес:
    Russia
    Asterix

    если не сложно покажи исходник