Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 12

Отлов нажатия клавиш в пределах своего приложения

25.02.2012, 15:35. Показов 2696. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать, чтобы при нажатии на какую=либо клавмшу, выполнлось какое либо действие? Например мне надо, чтобы при нажатии клавиши D выполнялось TextBox1.Text=""
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.02.2012, 15:35
Ответы с готовыми решениями:

Отлов нажатия клавиш на форме
Отлавливались нажатия на клавиши на форме (Handles Me.KeyDown). После добавления на форму текстового поля и кнопки, отлов прекратился. Куда...

Отлов нажатия клавиш. Не отлавливает русские символы
Существует выборка Case 65 To 90 If Control.IsKeyLocked(Keys.CapsLock) Or (Control.ModifierKeys And Keys.Shift)...

Глобальный Hook - отлов нажатия одной из клавиш
Добрый вечер! Извините за ламерский вопрос. Проблема заключается в следующем. Мне нужно что бы программа глобально отзывалась на одну из...

11
525 / 487 / 99
Регистрация: 25.12.2011
Сообщений: 1,176
25.02.2012, 16:00
VB.NET
1
2
3
4
5
6
7
8
    <Runtime.InteropServices.DllImport("user32.dll")> _
    Public Shared Function GetAsyncKeyState(ByVal vKey As System.Windows.Forms.Keys) As Short
    End Function
 
'В таймер:
If GetAsyncKeyState(Keys.D) Then
TextBox1.Text = ""
End If
0
 Аватар для coderxx
469 / 183 / 16
Регистрация: 25.02.2012
Сообщений: 418
Записей в блоге: 2
25.02.2012, 20:54
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от Hennasy Посмотреть сообщение
'В таймер:
If GetAsyncKeyState(Keys.D) Then
Это не в пределах своего приложения.
Можно с помощью события KeyDown формы, установив свойства KeyPreview = True
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
20.10.2014, 20:54
Цитата Сообщение от coderxx Посмотреть сообщение
Можно с помощью события KeyDown формы, установив свойства KeyPreview = True
Ни Можно, а только так и нужно... !
0
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
23.05.2015, 11:28
Парни, а как правильно сделать отлов нажатия нескольких клавиш?
К примеру "ctrl" и "d".
В интернете куча примеров, но они все кардинально разные или какой-то непонятный и громоздкий код, вот как здесь например
Нет ли более простых и понятных вариантов?
0
 Аватар для edward_freedom
1569 / 1448 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
23.05.2015, 12:20
Дядя Корней, Существует такая штука как And в условии и не знать ее просто стыдно
VB.NET
1
If GetAsyncKeyState(Keys.D) And GetAsyncKeyState(Keys.A) Then
0
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
23.05.2015, 12:33
edward_freedom, про And тут спору нет, кто про эту штуку не знает, тому бесспорно стыдно, но мне эта штука известна, поэтому я немного про другое.

Допустим, если взять тот же код:
VB.NET
1
If GetAsyncKeyState(Keys.D) And GetAsyncKeyState(Keys.A) Then
то на вин8 он не работает в зависимости от выбранного языка клавиатуры, поэтому приходится городить вариант с проверками, но это 100% колхоз, наверняка есть какие-то нормальные предусмотренные для этого методы работы. Я собственно про них и спрашиваю.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
23.05.2015, 15:12
Дядя Корней, в пределах своего приложения GetAsyncKeyState не нуджен.
ставишь в свойсвах формы KeyPreview в True и в KeyPress пишешь условия типа:
If e.KeyData = Keys.A Then

Добавлено через 1 минуту
а GetAsyncKeyState это глобальное отлавливание состояния, которое действует и при свернутой в трей форме...
1
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
23.05.2015, 16:27
Yury Komar, спасибо, ознакомился.
А можно ли как-то сюда
VB.NET
1
If e.KeyCode = Keys.D And e.Alt Then
прицепить не одну кнопку "D", но и еще какую-нибудь?
Как я понял система отслеживает удерживание только системных клавиш альт, шифт и контрол. Как прицепить скажем к шифту не одну кнопку, а две, я так и не понял.
Т.е. нужно чтобы нажимаю одновременно - "шифт" + "D" + "E" и чтобы что-то происходило.
С шифтом и нажатием одной клавиши проблем нет, всё работает.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
23.05.2015, 16:49
что-то типа
VB.NET
1
If ModifierKeys.Shift = True and Keys.A and Keys.D Then...
точно не помню...

Добавлено через 2 минуты
почему бу просто не установить условие добавив еще один
VB.NET
1
And Keys.D
Добавлено через 1 минуту
VB.NET
1
If e.KeyCode = Keys.D And e.KeyCode = Keys.E And e.Alt Then
Добавлено через 3 минуты
хотя смотри в сторону использования
VB.NET
1
2
3
ModifierKeys.Control
ModifierKeys.Alt
ModifierKeys.Shift
с добавлением нужных клавишь и будет тебе счастье

Добавлено через 6 минут
Дядя Корней, пример вот тебе

VB.NET
1
2
3
4
5
Private Sub Form_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
        If e.Modifiers = Keys.Shift And e.KeyCode = Keys.D And e.KeyCode = Keys.E Then
       
        End If
  End Sub
1
399 / 318 / 53
Регистрация: 14.08.2014
Сообщений: 1,010
23.05.2015, 16:57
Yury Komar,
Так я пробовал
VB.NET
1
If ModifierKeys.Shift = True and Keys.A and Keys.D Then
VB.NET
1
If e.KeyCode = Keys.D And e.KeyCode = Keys.E And e.Alt Then
не работает.


Посмотрю сейчас, что такое ModifierKeys.

Добавлено через 5 минут
Yury Komar,
VB.NET
1
2
3
4
5
Private Sub Form_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
        If e.Modifiers = Keys.Shift And e.KeyCode = Keys.D And e.KeyCode = Keys.E Then
       
        End If
  End Sub
Так тоже не хочет работать.
Странно.
0
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
23.05.2015, 17:37
Дядя Корней, тогда используй GetAsyncKeyState, но с установкой условия в сторону видимости формы. тоесть если форма не свернута и на переднем плане, то проверяй состояния клавишь с помошью GetAsyncKeyState и выполняй дейстие.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.05.2015, 17:37
Помогаю со студенческими работами здесь

Отслеживание нажатия клавиш в пределах формы
У меня при нажатии на кнопку D картинка двигается: Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As...

Отлов нажатия клавиш в пределах приложения
Клавиши должны перехватываться не глобально, а в пределах приложения с несколькими формами... Подскажите на c# или c++/cli

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

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

Отлов нажатия клавиш
Хочу создать класс, который будет мне говорить, какая клавиша нажата в данный момент. Как это сделать?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru