В руководствах предлагают подсчитывать длину превращенного в строку значения NumericUpDown, но на практике это приводит к мелким глюкам, так что я просто делаю выделение на длину, заведомо большую всех возможных значений:
someNumUpDown.Select(0, 20);
Если NumericUpDown'ов много, то ручное проставление создание функций для каждого события становится весьма муторным занятием, лучше написать универсальную функцию для произвольного NumericUpDown назначить события в обход дизайнера:
someNumUpDown.Enter += new System.EventHandler(selecNumUpDownText); someNumUpDown.Click += new System.EventHandler(selecNumUpDownText); anotherNumUpDown.Enter += new System.EventHandler(selecNumUpDownText); anotherNumUpDown.Click += new System.EventHandler(selecNumUpDownText); private void selecNumUpDownText(object numUpDownObj, EventArgs e) { (numUpDownObj as NumericUpDown).Select(0, 20); }
Для новичка последняя функция может показаться несколько запутанной. На самом деле она очень проста. Абсолютно все классы в .Net являются наследниками класса Object. Соответственно любой объект любого класса мы можем превратить в Object, после чего произвести обратную операцию. Поэтому при любом событии мы получаем ссылку на объект, на котором произошло событие, завернутую в абстрактный тип базового для всех Object. В данном случае наша функция предполагает, что получаемый ей Object в прошлой жизни был объектом класса NumericUpDown и преобразует его обратно, после чего вызывает один из методов этого класса. Опытный программист заметит, что подобный код никак не защищен от передачи в него некорректного значения, внутри object может быть все что угодно, но в простых случаях сойдет и так.
How to set all numericupdown auto-select text when got focus?