.NET NumericTextBox - PullRequest
       47

.NET NumericTextBox

0 голосов
/ 17 сентября 2008

Кто-нибудь знает, почему Microsoft не поставляет числовое текстовое поле со своей .NET Framework, например текстовое поле, которое будет гарантировать, что введенные символы всегда являются действительными числами? Это то, что обычно используется в приложениях разных вкусов и действительно то, что большинство библиотек GUI (ну, те, которые я знаю) предоставляют в некотором роде. Хотя не трудно написать свою собственную, это тоже не тривиально.

Итак, мне интересно узнать, может ли кто-нибудь обосновать это упущение.

edit: Спасибо за предложения. В то время как замаскированные текстовые поля и числовые спуски имеют свое место; Меня интересует элемент управления, который выглядит как текстовое поле, но автоматически выполняет проверку при нажатии клавиши, что ввод соответствует действительному числу. По моему (по общему признанию ограниченному) опыту, это то, что используется довольно часто (мы не всегда хотим, чтобы статические ограничения накладывались замаскированными текстовыми полями, так же, как мы не всегда хотим, чтобы элементы управления вверх-вниз располагались сбоку) ,

В сети существует множество реализаций с различными уровнями качества, и действительно, есть даже пример этого на MSDN .

edit2: Спасибо, ребята, звучит так, будто цифра вверх-вниз - это элемент управления .NET, используемый только для ввода чисел (и причина, по которой у нас на самом деле нет явного элемента управления числового поля). Было бы замечательно, если бы он автоматически запрещал ввод нецифровых символов (при нажатии клавиш, при вставке и т. Д.), Но я думаю, это достаточно хорошо, чтобы он выполнял проверку, когда элемент управления теряет фокус. И можно было бы нажимать на клавиши, проверять вставку, если бы они действительно были заинтересованы ...

Ответы [ 8 ]

4 голосов
/ 17 сентября 2008

Я рекомендую Garry Shutlers использовать NumericUpDown. Возможно, вам не понравятся элементы управления «вверх-вниз», но - это стандартный вид числового элемента управления вводом в Windows, и вам следует дважды подумать об использовании другого вида.

Если вы в конечном итоге закодируете свою собственную реализацию (или найдете ее в Интернете), есть некоторые подводные камни, на которые стоит обратить внимание. Помните, что существует множество способов получить значение в элементе управления, кроме нажатий клавиш. Тот, что в вашей ссылке на MSDN, даже не отменяет вставку, так что вы можете легко ctrl-V нечисловая строка в элементе управления.

4 голосов
/ 17 сентября 2008

Вы можете использовать MaskedTextBox

3 голосов
/ 17 сентября 2008

Начиная с WinForms 2.0, у вас есть MaskedTextBox. Вы можете установить маску по своему усмотрению, то есть для чисел используйте маску все 0s.

3 голосов
/ 17 сентября 2008

Существует элемент управления NumericUpDown , который создан специально для ввода чисел и может использоваться как TextBox.

1 голос
/ 17 сентября 2008

Некоторые элементы управления .NET Framework, как ни странно, не предоставляют всех функций базового элемента управления Windows, который они переносят. В этом случае по какой-то причине стиль ES_NUMBER не был реализован.

Возможно, вы можете обработать событие HandleCreated (или переопределить OnHandleCreated, так как TextBox не запечатан) и вызвать SetWindowLong , чтобы установить стиль ES_NUMBER для базового элемента управления Edit. ES_NUMBER определяется как 0x2000 в WinUser.h.

0 голосов
/ 18 сентября 2008

На основании второго редактирования:

FAQ по Windows Forms рассказывает, как ограничить символы в текстовом поле 26.12 :

26.12 Как я могу ограничить символы, которые может принимать мое текстовое поле?

Вы можете обработать событие KeyPress текстового поля, и если переданный символ недопустим, пометьте аргумент events как показывающий, что символ был обработан. Ниже приведен производный TextBox, который принимает только цифры (и управляющие символы, такие как backspace, ...). Хотя во фрагменте используется производное текстовое поле, в этом нет необходимости, поскольку вы можете просто добавить обработчик в его родительскую форму.

См. FAQ для примера кода.

0 голосов
/ 17 сентября 2008

Microsoft предоставляет третьим сторонам возможность заполнить пробелы в отношении отсутствующих элементов управления на панели инструментов. Я полагаю, что время и стоимость фигурируют в их обосновании.

В этом случае, однако, я думаю, что FilteredTextBox обеспечивает функциональность, которую вы описываете.

0 голосов
/ 17 сентября 2008

Вы также можете получить класс TextBox и захватить событие клавиатуры и убедиться, что ничего, кроме цифр, не записано.

Если бы это была веб-страница, то же самое было бы сделано для текстового поля html с использованием Javascript.

...