Выделяем весь текст в большом количестве NumericUpDown по клику

В руководствах предлагают подсчитывать длину превращенного в строку значения 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?

Control.Select - метод


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *


*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>