Что-то я не понимаю - надо ограничить ввод в text box только чисел с несколькими знаками после запятой. Если поставить свойство numbers то не позволяет ввести запятую. Если обрабатывать каждую нажатую клавишу то проблемы с тем что можно несколько запятых ввести и т.п. Есть красивое решение ?
Сабклассить (сабклассировать?) контрол. Допустимые символы: 0-9 + '.'. А насколько красивым будет решение, так это от разработчика зависит…
Просто разрешить точку - могут наставить несколько точек. Я писал подобную сабклассирующую процедуру. Есть IMHO на MadWizard сайте в снипетах.
Нет, ну понятно, что надо хранить флаг, что точка уже есть. Можно у себя, можно через Set/GetWindowLong.
infern0 После каждого нажатия смотреть, есть ли среди введённых ранее запятая, если уже была - игнорировать последнюю введённую. Особых проблем в этом нет. P.S. Почему текст бокс, а не edit?
И отслеживать если её удалили при редактировании. А отслеживать удаление просто не получается - в отличии от впечатывания тебе ведь не сообщается какой символ удалили - приходится разбираться через сканирование или ещё как. Так что не сложно но и так уж просто чтобы быстро было. Особенно если изменения copy\paste делаются. допустим есть уже в edit 1234.56 и курсор стоит после "6" в это время делается paste текста "7.8". Что делать? Что вообще тут должно быть результатом? 1234.567? Отмена paste? 1234.5678?
The Svin не усложняй мне бы примерчик, для простоты запретим copy/paste. ps: разрешение проблем с copy/paste - вариант с аналогом maskedit из билдера. При маске ######.## никаких проблем с разрешением конфликтов нету. Может такое проще сделать ?
Зачем такие сложности? Садись на EN_CHANGE - бери техт через обычный GetWindowText и пропускай этот текст через фильтр, который возвратит TRUE/FALSE и если текст не то что надо - disable те контрольные окна, которыми нельзя пользоваться (кнопка ОК, например...)
AsmGuru62 нет, это фигня. Надо именно запретить ввод левых символов. А такая проверка у меня и сейчас есть.
Что-то я не понял что нужно. Нужно разрешить ввод чисел только с двумя(к примеру) знаками после запятой? А зачем такое понадобилось?
Тут самое сложное это именно отследить количество знаков после запятой и то место в которое вводится текущий символ, т.е. нужно получать положение курсора и текст из Edit'а, в буфере производить добавление символа в нужную позицию и проверять не нарушено ли условие о количестве знаков после запятой, и потом уже разрешать или запрещать ввод. Т.е. это Subclassing + небольшая тестирующая процедура..
infern0 Вот, как вариант, можно вводить 0-9 и '.', два знака после запятой.. Если интересен могу выложить исходник, но мне самому пока что этот вариант не нравится. 1242136724__MaskedEdit.exe
Блин, чё вы паритесь, я делал проще простого: сабклассить контрол, после любого изменения текста просматривать весь и сообщать о первом неподходящем символе. Это в теории работет медленно, при этом на практике всё нормально.