Взаимодействие с клавиатурой
Обычно контрол получает события от клавиатуры только в том случае, если он находится в фокусе. В простом контроле достаточно переопределить OnKeyDown и/или OnKeyPress, чтобы получить информацию о нажатых кнопках. Однако контейнеры (например, форма) могут перехватывать обработку нажатий клавиш раньше, чем они дойдут до текущего контрола.
При необходимости различать нажатие клавиш с клавишами-модификаторами, такими как Control, Shift, Alt, используйте свойство Modifiers полученного в обработчике объекта KeyEventArgs или отдельные свойства Control, Shift и Alt. Используйте свойство KeyCode этого объекта, если вы хотите получить код нажатой клавиши отдельно, и свойство KeyData, если вам нужно значение, комбинированное с управляющими клавишами. Также имеется свойство KeyValue, которое является целым числом, представляющим KeyData.
Для получения управляющих клавиш, вроде Tab, Return, Escape и стрелочек, которые обычно обрабатываются формой или другим контейнером, необходимо перегрузить метод IsInputKey и вернуть для нужных клавиш значение true. В противном случае такие кнопки будут обработаны контейнером согласно собственным правилам и не достигнут вашего контрола. В некоторых случаях может понадобиться перегрузить ProcessCmdKey или ProcessDialogKey.
Поддержка дизайнера форм и редактора
Хороший контрол должен быть удобен не только во время выполнения, но и при использовании его в дизайнере форм. Подробный рассказ о собственном дизайнере или редакторе выходит за рамки данной статьи, однако многие вещи довольно просты и могут резко повысить удобство использования вашего контрола во время дизайна.
- Краткий путеводитель
- Проектируйте
- Сохраняйте гибкость
- Коллекции элементов
- Отрисовка
- Придерживайтесь стандартов
- Оптимизируйте
- Взаимодействие с мышью
- Взаимодействие с клавиатурой
- Поведение в режиме дизайна
- Использование атрибутов
- Коллекции
- Конверторы типов
- Расширение компонентов
- Локализация
- Источники данных
- Доступность
- Конвертор типа