какое событие класса control отвечает за работу с клавиатурой

Класс Control

какое событие класса control отвечает за работу с клавиатурой какое событие класса control отвечает за работу с клавиатурой какое событие класса control отвечает за работу с клавиатурой какое событие класса control отвечает за работу с клавиатурой

какое событие класса control отвечает за работу с клавиатурой

какое событие класса control отвечает за работу с клавиатурой

Класс Control является базовым для всех отображаемых элементов, то есть эле­ментов, которые составляют графический интерфейс пользователя, например кнопок, списков, полей ввода и форм. Класс Control реализует базовую функцио­нальность интерфейсных элементов. Он содержит методы обработки ввода поль­зователя с помощью мыши иклавиатуры, определяет размер, положение, цвет фона идругие характеристики элемента. Для каждого объекта можно опреде­лить родительский класс, задав свойство Parent, при этом объект будет иметь, на­пример, такой же цвет фона, как и его родитель (речь идет не о наследовании, а о взаимоотношениях объектов во время выполнения про­граммы, например, если на форме размещена кнопка, форма является родительским объектом по отношению к кнопке).

Наиболее важные свойства класса Control перечислены в табл. 14.2, методы — в табл. 14.3.

Таблица 14.2.Основные свойства класса Control

Anchor Определяет, какие края элемента управления будут привязаны

к краям родительского контейнера. Если задать привязку всех краев, элемент будет изменять размеры вместе сродительским

BackColor, Определяют параметры отображения рабочей области формы:

BackgroundImage, Font, цвет фона, фоновый рисунок, шрифт, цвет текста, вид

ForeColor, Cursor указателя мыши

Bottom, Right Координаты нижнего правого угла элемента. Могут устанавливаться

также через свойство Size

Top, Left Координаты верхнего левого угла элемента. Эквивалентны свойству

Bounds Возвращает объект типа Rectangle (прямоугольник), который определяет

размеры элемента управления

ClientRectangle Возвращает объект Rectangle, определяющий размеры рабочей области

ContextMenu Определяет, какое контекстное меню будет выводиться при щелчке на

элементе правой кнопкой мыши

Dock Определяет, у какого края родительского контейнера будет отображаться

Location Координаты верхнего левого угла элемента относительно верхнего левого угла

контейнера, содержащего этот элемент, в виде структуры типа Point.

Структура содержит свойства X и Y

Height, Width Высота и ширина элемента

Size Высота и ширина элемента в виде структуры типа Size. Структура содержит

свойства Height и Width

Created, Disposed, Возвращают значения типа bool, определяющие текущее

Enabled, Focused, состояние элемента: создан, удален, использование

Visible разрешено, имеет фокус ввода, видимый

Handle Возвращает дескриптор элемента (уникальное целочисленное значение,

ModifierKeys Статическое свойство, используемое для проверки состояния

модифицирующих клавиш (Shift, Control, Alt). Возвращает результат в виде

MouseButtons Статическое свойство, проверяющее состояние клавиш мыши. Возвращае

результат в виде объекта типа MouseButtons

Opacity Определяет степень прозрачности элемента управления. Может изменяться от

0 (прозрачный) до 1 (непрозрачный)

Parent Возвращает объект, родительский по отношению к данному (имеется в виду н

базовый класс, а объект-владелец)

Region Определяет объект Region, при помощи которого можно управлять

очертаниями и границами элемента управления

TabIndex, TabStop Используются для настройки последовательности перемещения с помощью

клавиши Tab по элементам управления, расположенным на форме

Focus Установка фокуса ввода на элемент (в элемент, имеющий фокус ввода,

направляется ввод пользователя с клавиатуры)

GetStyle, SetStyle Получение и установка флагов управления стилем элемента. Используются

значения перечисления Control Styles (см. далее)

Hide, Show Управление свойством Visible (Hide — скрыть элемент, Show — отобразить

Invalidate Обновление изображения элемента путем отправки соответствующего

сообщения в очередь сообщений. Метод перегружен таким образом, чтобы

можно было обновлять не всю область, занимаемую элементом, а лишь ее

ОnХХХХ Методы-обработчики событий (OnMouseMove, OnKeyDown, OnResize,

OnPaint и т. п.), которые могут быть замещены в производных классах

Refresh Обновление элемента и всех его дочерних элементов

SetBounds, Управление размером и положением элемента SetLocation, SetClientArea

какое событие класса control отвечает за работу с клавиатурой

В табл. 14.4 перечислена небольшая часть событий, определенных в классе Control.
Таблица 14.4. Некоторые события класса Control

Событие Описание

Click, DoubleClick, MouseEnter, MouseLeave, События от мыши MouseDown, MouselUp,

KeyPress, KeyUp, KeyDown События от клавиатуры

BackColorChanged, ContextMenuChanged, События изменения элемента

Источник

Как привязать клавишу клавиатуры к button С# form?

Подскажите пожалуйста, как привязать клавишу клавиатуры к button С# form? Событие Click уже занято. А KeyPress не пойму как работает. Пишу калькулятор.

какое событие класса control отвечает за работу с клавиатурой

2 ответа 2

WinForms и клавиатура, довольно веселое сочетание, особенно когда пытаешься их заставить работать согласованно.

1. События Control.Key*

2. Форма тоже контрол

Класс Form также наследуется от контрол, и умеет получать эти события. Вроде бы очевидно, переносим обработку клавиш в события формы и радуемся, она же вроде бы всегда в фокусе. Но и тут не все так просто. Если дочерний контрол настроен на обработку клавиш и находится в фокусе (а если на форме есть дочерние контролы, то один из них обязательно в фокусе), то форма просто игнорирует нажатия на клавиши.

Можно вспомнить о свойстве формы Form.KeyPreview, которое предназначено для перехвата событий, тогда события клавиатуры будут сначала передаваться в форму. Это вроде бы рабочий вариант, но если вы не хотите чтобы стандартный функционал контролов все еще работал, то придется не забыть выставить свойство KeyPressEventArgs.Handled = false; чтобы после обработки события клавиатуры на уровне формы, оно было передано в дочерние контролы. Честно говоря, это не самый лучший вариант, т.к. имеет свои ограничения и далеко не все задачи можно решить таким способом. Хотя он вроде для этого и задуман.

3. Нас спасет меню

4. Универсальное решение

Не торопитесь радоваться, все предыдущие пункты требовали только мастерского владения кликом мыши в интерфейс конструктора, а тут потребуется писать код.

В форме, как и любом контроле есть виртуальный метод ProcessCmdKey, который отвечает за дефолтную обработку событий клавиатуры, вот его-то и потребуется переопределить в нашей форме для получения ожидаемой и корректной работы с клавиатурой.

5. Ну и как этим воспользоваться?

Да собственно как и обычно. Нажатие на клавишу и клик по кнопке это действие пользователя, которое должно вызвать какую-то реакцию программы. Реакцию описываем отдельным приватным методом, а в обработчики клика кнопки и нажатия на клавишу кладем вызов этого метода. Такой подход избавляет от необходимости копировать код, сводит код обработчиков событий к минимуму, позволяет вызывать заданную реакцию программы любым нужным способом, будь то клик по какому либо контролу, выбор чекбокса или радио-баттона, клавиша или сочетание, пункт меню или все сразу. Код реакции находится в одном месте и при необходимости его изменить не придется думать где еще вы его забыли поправить.

Если хватит энтузиазма, позже соберу в этом ответе ссылки на связанные вопросы с хорошими ответами. А пока первое что нашлось по теме без глубокого копания:

Источник

Формы Windows Forms предоставляют возможность получать и изменять вводимые с клавиатуры данные. Получением клавиши называется обработка клавиши внутри метода или обработчика событий таким образом, чтобы следующие методы и события в очереди сообщений не получали значение этой клавиши. Изменением клавиши называется изменение значения клавиши таким образом, чтобы следующие методы и обработчики событий в очереди сообщений получали другое значение клавиши. В этой статье показано, как выполнять данные задачи.

Получение клавиши

Установка свойства Handled в обработчике событий KeyDown не препятствует возникновению событий KeyPress и KeyUp для текущей клавиши. Для этой цели используется свойство SuppressKeyPress.

Изменение стандартной символьной клавиши

В обработчике событий KeyPress задайте для свойства KeyChar класса KeyPressEventArgs значение новой символьной клавиши.

Изменение клавиши, не связанной с символом

Единственный способ изменения нажатий клавиш, не связанных с символами, — выполнить наследование от элемента управления и переопределить метод PreProcessMessage. После отправки входных данных Message в элемент управления они обрабатываются до того, как элемент управления порождает события. Вы можете перехватить эти сообщения, чтобы изменить или заблокировать их.

В примере кода ниже показано использование свойства WParam параметра Message для изменения нажатой клавиши. Этот код обнаруживает клавишу в диапазоне от F1 до F10 и преобразует клавишу в число в диапазоне от 0 до 9 ( F10 соответствует 0 ).

Источник

Пример обработки событий «Нажатие клавиш»

В компьютерных играх и не только часто используют нажатие одной или нескольких (комбинаций) клавиш.
Известно, что нажатия клавиш (далее — ключевые события) происходят в следующем порядке:
1) KeyDown
2) KeyPress
3) KeyUp
То есть, если Вы клавишу нажали, но не отпустили, событие KeyUp не наступает.
Заметим, что KeyPress-событие не вызывается несимвольными ключами, отличными от пробела и Backspace; однако, несимвольные ключи вызывают события KeyDown и KeyUp. Обязательно задайте свойство Form1.KePreview=true для получения реакции на клавишу — событие Control.KeyPress.

Используйте свойство KeyChar для выборки сочетаний клавиш во время выполнения, а также для использования или изменения подмножества распространенных нажатий клавиш.

Чтобы обрабатывать события клавиатуры только на уровне формы и не включать другие элементы управления для получения событий клавиатуры, задайте KeyPressEventArgs.Handled для свойства в KeyPress-методе обработки событий формы значение true.

Приведенные примеры методов обработки этих событий помогут Вам решить любые задачи:

5 комментариев к “Пример обработки событий «Нажатие клавиш»”

Пример, сам по себе, является образцом как не нужно делать, между проверкой и вызовом, может произойти отписывание от события и тогда получим NullReferenceException. Выходов из этой ситуации ровно два. Первый — копируем событие в локальную переменную и работаем с ней, второй — в месте инициализации класса добавляем пустой обработчик для события, исключая ситуацию, когда на него никто не подписан и оно равно null.

Олеся, согласен с Вами, но это был простейший пример. Пусть сначала возникнет исключение в программе.

А можно пояснить, в чем проблема? Не совсем понял, что значит «между проверкой и вызовом» и в чем состоит проблема? (как и вариант ее решения)

Если форма подписана на KeyDown, то это событие обрабатывается.
Если форма в какой-то момент отпишется от события — обработчик перестанет вызывать и все.
Что я упускаю?

Антон! Вы верно отметили: Есть событие возникло и с ним связан метод — оно обрабатывается, нет связи — нет обработки. Другой вопрос, если в однопоточном приложении возникает несколько событий и как их обрабатывать. В моем примере нажатие на клавишу изменяет содержимое textBox (это только для иллюстрации было), но чаще нажатие клавиши связывают с движением и перерисовкой объекта (игрока), которая может занять заметное время, поэтому можно дирижировать событиями.

Извините можете объяснить как Правильно а не ПРОСТО сделать действие на нажатие клавиши?
Заранее спасибо за ответ!

Источник

Средства базового класса Control. События клавиатуры. События проверки.

Класс Control содержит более 300 членов, и описать их все (или хотя бы большую часть) в одной главе просто невозможно. Следовательно, вам все равно придется обратиться к электронной документации [Кстати говоря, пакет форм Windows автоматически опознает операции с колесом мыши и обеспечивает прокрутку формы/элемента там, где это имеет смысл. Таким образом, в большинстве случаев вам не придется использовать новое событие Control.MouseWheel.]. Однако события клавиатуры и события проверки, занимающие важное место в работе элементов, несколько отличаются от своих прототипов из VB6, и при работе с ними следует помнить о некоторых нюансах.

События клавиатуры

Три события клавиатуры инициируются в тех же ситуациях, что и их аналоги из прежних версий VB.

По аналогии с VB6 событие KeyDown инициируется раньше события KeyPress, которое, в свою очередь, предшествует KeyUp. Событие KeyPress использует объект KeyPressEventArgs, в свойстве KeyChar которого передается информация о нажатой клавише.

Например, следующий фрагмент выводит окно сообщения в том случае, если введенный символ не является цифрой:

События KeyDown и KeyUp, как и в VB6, могут использоваться для проверки клавиш-модификаторов (таких, как CTRL и ALT). Класс KeyEventArgs, передаваемый этим событиям, обладает несколько большими возможностями, чем класс KeyPressEventArgs события KeyPress. Класс KeyEventArgs содержит свойство KeyData, в котором при помощи перечисляемого типа Key передается полная информация о комбинациях клавиш и о состоянии клавиш-модификаторов в момент нажатия.

Свойства Modifiers и SHIFT позволяют узнать об одновременном нажатии трех клавиш (ALT + SHIFT + другая клавиша). Например, следующая команда проверяет, была ли нажата клавиша-модификатор ALT:

Примечание
Если вас не интересуют такие мелочи, как различия между левой и правой клавишей SHIFT, удобнее воспользоваться свойствами Control SHIFT и ALT класса KeyEventArgs
.

К сожалению, значения свойств KeyChar и KeyData нельзя сбросить, поскольку они доступны только для чтения [Возможно, этот недочет будет исправлен в окончательной версии.]. Впрочем, введенный символ можно «поглотить» и тем самым предотвратить его появление в элементе; для этого свойству Handled объекта события задается значение True. Пример:

В результате неверный символ не появится в текстовой поле.

События проверки

Команда e.Cancel = True отменяет передачу фокуса от текстового поля другому элементу, если в поле нет ни одного символа.

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

Примечание
Если свойство CausesValidation элемента равно False, события Validating и Validated не инициируются
.

Источник

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

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