Windows forms обработка нажатия клавиши

Практическое руководство. Обработка события нажатия кнопки в Windows Forms How to: Respond to Windows Forms Button Clicks

Самым простым использованием Button элемента управления Windows Forms является выполнение некоторого кода при нажатии кнопки. The most basic use of a Windows Forms Button control is to run some code when the button is clicked.

При щелчке Button элемента управления также создается ряд других событий, таких как MouseEnter события, MouseDown и MouseUp . Clicking a Button control also generates a number of other events, such as the MouseEnter, MouseDown, and MouseUp events. Если вы планируете присоединить обработчики событий для этих связанных событий, убедитесь, что их действия не конфликтуют. If you intend to attach event handlers for these related events, be sure that their actions do not conflict. Например, если нажать кнопку, чтобы очистить сведения, введенные пользователем в текстовое поле, при наведении указателя мыши на кнопку не должно отображаться всплывающая подсказка с несуществующими сведениями. For example, if clicking the button clears information that the user has typed in a text box, pausing the mouse pointer over the button should not display a tool tip with that now-nonexistent information.

Если пользователь пытается дважды щелкнуть Button элемент управления, каждый щелчок будет обрабатываться отдельно, то есть элемент управления не поддерживает событие двойного щелчка. If the user attempts to double-click the Button control, each click will be processed separately; that is, the control does not support the double-click event.

Реагирование на нажатие кнопки To respond to a button click

В этой кнопке Click EventHandler напишите код для выполнения. In the button’s Click EventHandler write the code to run. Button1_Click должен быть привязан к элементу управления. Button1_Click must be bound to the control. Дополнительные сведения см. в разделе инструкции. Создание обработчиков событий во время выполнения для Windows Forms. For more information, see How to: Create Event Handlers at Run Time for Windows Forms.

Обработка нажатия кнопки мыши + клавиатуры

Не работает обработка события нажатия кнопки клавиатуры в форме
Здравствуйте! Есть проблема, задали курсовик, но не получается реализовать несколько моментв: 1.

Обработка события нажатия клавиши мыши
При наведении на определенную область необходимо заменить курсор на другой и при нажатии выполнить.

Обработка нажатия на левую клавишу мыши
Подскажите как мне в методе OnPanelClick задать условие, что нажата левая кнопка мыши. Я не знаю.

Можно пойти по тяжёлому пути:
bool KeyPress = false;
1. Обрабатываешь событие формы KeyDown при этом KeyPress = true;
2. Обрабатываешь событие формы KeyUP при этом KeyPress = false;
3. Обрабатываешь событие формы или контрола MouseClick

Читайте также:  Лучший плеер под линукс

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

Я хочу чтобы события мыши обрабатывались только после выполнения условий обработки клавиатуры. То есть, если я просто кликну по, например, listView пару раз, происходит одна операция, если я сделаю то же самое (или кликну один раз) но предварительно нажав какую то клавишу, например, Ctrl, должна отработать другая процедура.

Тут еще мне в принципе важен порядок — сначала должна проверяться именно нажатая клавиша и только после того как определено что она нажата, обрабатываться мышь.

Наоборот я сделал. Вот в этом коде сначала проверяется клик мыши, потом нажатая клавиша и если оба условия совпадают выполнятся нужный код:

Но, есть проблема.
Если нажать клавишу Ctrl а затем быстро кликнуть по объекту на форме, то трюк не сработает. Запустится button1_Click.
Если хоть полсекунды выждать — нормально.
Если сперва кликнуть объект, а затем нажать клавишу — тоже порядок.

Добавлено через 3 минуты
От ложного срабатывания button1_Click (для моего примера) можно поставить флаг

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

ContextMenuStrip, сценарий множественного нажатия кнопки мыши
Добрый день, подскажите пожалуйста, в MSDN написано, что ContextMenuStrip поддерживает сценарий.

Событие нажатия кнопки мыши в Юзер Контроле
Есть output : UserControl, подписка на событие внутри контрола, this.Click += new.

Обработчик события нажатия кнопки мыши для dataGridView
Здравствуйте=) помогите пожалуйста с решением вот этой задачи: для таблиц DataGridView создается.

Обработка нажатия стрелок клавиатуры
Мне нужно обработать события на клавиши «вверх», «вниз» «вправо»,»влево». Объясните пожалуйста по.

Использование событий клавиатуры Using Keyboard Events

В большинстве программ Windows Forms для обработки ввода с клавиатуры используются события клавиатуры. Most Windows Forms programs process keyboard input by handling the keyboard events. В этом разделе содержится обзор событий клавиатуры, включая сведения об использовании каждого события и данные, которые предоставляются для каждого события. This topic provides an overview of the keyboard events, including details on when to use each event and the data that is supplied for each event. См. также обзор обработчиков событий (Windows Forms) и Общие сведения о событиях (Windows Forms). Also see Event Handlers Overview (Windows Forms) and Events Overview (Windows Forms).

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

Windows Forms содержит два события, которые возникают при нажатии пользователем клавиши клавиатуры, и одно событие, которое возникает при отпускании пользователем клавиши. Windows Forms provides two events that occur when a user presses a keyboard key and one event when a user releases a keyboard key:

Событие KeyDown возникает один раз The KeyDown event occurs once

Событие KeyPress, которое может встречаться несколько раз, если пользователь удерживает нажатую клавишу. The KeyPress event, which can occur multiple times when a user holds down the same key.

Читайте также:  Usb адаптер wifi как точка доступа wifi windows

Событие KeyUp возникает один раз при отпускании клавиши. The KeyUp event occurs once when a user releases a key.

Когда пользователь нажимает клавишу, Windows Forms определяет, какое событие вызвать в зависимости от того, на что указывает сообщение клавиатуры — на клавишу с символом или на физическую клавишу. When a user presses a key, Windows Forms determines which event to raise based on whether the keyboard message specifies a character key or a physical key. Дополнительные сведения о символьных и физических ключах см. в разделе как работает ввод с клавиатуры. For more information about character and physical keys, see How Keyboard Input Works.

В следующей таблице описаны указанные три метода. The following table describes the three keyboard events.

События клавиатуры Keyboard event Описание Description Результаты Results
KeyDown Это событие возникает, когда пользователь нажимает физическую клавишу. This event is raised when a user presses a physical key. Обработчик KeyDown получает: The handler for KeyDown receives:
  • Параметр KeyEventArgs, который предоставляет свойство KeyCode (указывающее на физическую клавишу клавиатуры). A KeyEventArgs parameter, which provides the KeyCode property (which specifies a physical keyboard button).
  • Свойство Modifiers (SHIFT, CTRL или ALT). The Modifiers property (SHIFT, CTRL, or ALT).
  • Свойство KeyData (которое объединяет код клавиши и модификатор). The KeyData property (which combines the key code and modifier). Параметр KeyEventArgs также предоставляет: The KeyEventArgs parameter also provides:
  • Свойство Handled, которое может быть задано для предотвращения получения кода клавиши базовым элементом управления. The Handled property, which can be set to prevent the underlying control from receiving the key.
  • Свойство SuppressKeyPress, которое может использоваться для подавления событий KeyPress и KeyUp для данного нажатия клавиши. The SuppressKeyPress property, which can be used to suppress the KeyPress and KeyUp events for that keystroke.
KeyPress Это событие возникает если в результате нажатия клавиши или клавиш получается символ. This event is raised when the key or keys pressed result in a character. Например, пользователь нажимает клавиши SHIFT и строчную «a», в результате получается символ заглавной буквы «A». For example, a user presses SHIFT and the lowercase «a» keys, which result in a capital letter «A» character. KeyPress возникает после KeyDown. KeyPress is raised after KeyDown.
  • Обработчик KeyPress получает: The handler for KeyPress receives:
  • Параметр KeyPressEventArgs, который содержит код символа нажатой клавиши. A KeyPressEventArgs parameter, which contains the character code of the key that was pressed. Этот код является уникальным для каждой комбинации клавиш символа и модификатора. This character code is unique for every combination of a character key and a modifier key.

Например клавиша «A» создаст For example, the «A» key will generate:

Как правильно перехватывать нажатия клавиш в Windows Forms (C++)?

На Form есть DataGridView (в нём показывается одна строка) и WebBrowser .

У Form на Event keyDown есть обработчик, который срабатывает на нажатие F2 , который записывает слово в определенную ячейку. Этот же обработчик привязан к DataGridView .

Необходимо, чтобы нажатие на F2 срабатывало всегда и сразу (с первого раза). Для этого я воспользовался свойством KeyPreview = false; (пробовал устанавливать его в true — не помогало).

Но когда Focus находится в WebBrowser , F2 не всегда срабатывает (иногда приходится нажимать F2 дважды). Как это победить?

Проект Windows Forms (C++, Visual Studio 2015)

2 ответа 2

Если уж перехватываете ввод пользователя на уровне формы, то там его и обрабатывайте. Простой тестовый проект с эквивалентным кодом на C# показал следующее:

  1. Если элемент в фокусе, все отрабатывает как надо.
  2. Если элемент не в фокусе и мы предварительно на уровне формы переключаем фокус на другой элемент, то событие о нажатой клавише уходит тому элементу, который был в фокусе во время нажатия на клавишу, что в принципе логично. Отсюда и необходимость второго нажатия на клавишу, т.к. первое нажатие отрабатывает только передачу фокуса и уходит предыдущему владельцу фокуса.

Что делать?

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

Изменить ваш код можно так:

или через switch — case если клавиш много. И не забываем удалить лишние обработчики или исключить из них обработку клавиш, перехватываемых на уровне формы.

Как сделать обработчик нажатия клавиш клавиатуры в неактивной форме?

Артем, там есть примеры, вы пробовали их запускать?

Хочу уточнить суть вопроса, получается у тебя программа работает в window forms, и ты хочешь чтобы при нажатии определенного сочетания клавиш, она у тебя закрывалась и работала в фоновом режиме, и наоборот также открывалась при сочетании клавиш. Если так, то есть уже готовый класс прямо в window forms, он называется KeyboardHook, просто подключаешь его, вставляешь в код инициализации window forms, где объявляешь его и назначаешь клавиши для него и он будет работать в фоновом режиме и ловить сочетания клавиш, и для него нужно подключать ссылку на библиотеку user32.dll(Он уже встроен в Visual Studio и не надо скачивать стороннюю библиотеку) и только потом его использовать. Надеюсь ты умеешь подключать ссылки на библиотеки. Если нет, то загугли. К слову я работаю в основном на WPF и к нему нельзя подключить эту библиотеку(не знаю почему), только к window forms, и мне приходится вставлять ее вручную как класс(ты тоже можешь не подключать целую библиотеку, а подключить только один класс, скопировать и вставить как свой класс). Вот пример применения этого класса:

А вот она и сама

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

Читайте также:  Драйвера для принтера canon mf4410 для windows 10 64 bit
Оцените статью