Страница: 1 |
Страница: 1 |
Вопрос: В каком событии словить нажатие клавишь?
Добавлено: 19.11.06 12:57
Автор вопроса: Solomka | Web-сайт:
Здравствуйте, подскажите пожалуста...
Как в Visual Studio 2005 словить одновременное нажатие клавиш "Alt" + "Р" для формы (это не должно зависеть от какого-либо элемента на форме, т.к. как на одной форме несколько элементов управления, а на другой форме только один рисунок)? И как словить одновременное нажатие клавиш "Alt" + "L" для textBox'a? В каком событии всё это можно реализовать?
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #1
Добавлено: 19.11.06 13:38
Это делается в событии KeyDown или KeyUp. В эту процедуру в качестве параметра передается аргумент типа System.Windows.Forms.KeyEventArgs. Вот именно в нем и заложена вся информация о нажатых в данный момент клавишах (в т.ч. и Alt). И это событие есть как для формы, так и для текстового поля..
Номер ответа: 2
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #2
Добавлено: 19.11.06 17:20
А если охото глобальный хук на клаву, в .нете есть встроенные фишки какие-то?
Номер ответа: 3
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #3
Добавлено: 19.11.06 19:24
На счет глобального не знаю, не приходилось сталкиваться, но наверняка что-то есть.. Знаю только что есть такая штука как My.Computer.Keyboard (Microsoft.VisualBasic.Devices.Keyboard), из которой в любой момент можно вытащить состояние клавиатуры (хоть по таймеру), но это хуком не назовешь, скорее всего надо перехватывать события..
Номер ответа: 4
Автор ответа:
Solomka
Вопросов: 13
Ответов: 23
Web-сайт:
Профиль | | #4
Добавлено: 21.11.06 21:45
Получилось перехватить нажатие клавиш "Alt" + "Р" в событии KeyDown для формы.
Только не совсем так как хотелось...
Вызыветься определенная функция, если нажимать последовательно "Alt", а потом "Р", или наоборот...
А как сделать, чтобы эта функция вызывалась при одновременном нажатии?
Номер ответа: 5
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #5
Добавлено: 21.11.06 23:31
Private Sub frmMain_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
'// Без этой строки события клавиатуры отлавливаться не будут!
Me.KeyPreview = True
End Sub
Private Sub frmMain_KeyDown(ByVal sender As Object, _
ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
'// Ловим нужную комбинацию
If e.Alt And e.KeyCode = Keys.P Then
'// Твой код
MessageBox.Show("Keys 'Alt' & 'P' was pressed!"
End If
End Sub
End Class
Номер ответа: 6
Автор ответа:
danser
ICQ: 299287824
Вопросов: 76
Ответов: 209
Профиль | | #6
Добавлено: 22.11.06 12:24
Цитата с книги (смотри в теме "модификация PropertyGrid"
и обрабатывала сообщения, но разработчики не имели к ней доступа. Теперь у нас
есть доступ к процедурам не только в форме, но и в ее базовых классах, так что
мы легко можем их переопределить. В окне с кодом формы в левом выпадающем
списке выберите Override (переопределить). После этого левый выпадающий спи-
сок будет показывать все доступные для переопределения свойства и методы.
Последним в этом списке будет WndProc (рис. 1-11). Щелчок на ней создаст про-
тотип кода для обработчика событий WndProc.
Эта процедура — ядро нашего простого приложения. Теперь мы можем пере-
хватить и перенаправить любое сообщение Windows, которое нам может потре-
боваться...
Номер ответа: 7
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #7
Добавлено: 22.11.06 17:07
А какое отношение WndProc имеет к глобальному хуку? Это давно известная фишка, но она позволяет перехватить только те сообщения, которые получает ТВОЕ приложение, но не более..
Номер ответа: 8
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #8
Добавлено: 22.11.06 17:39
не приложение, а окно.
Номер ответа: 9
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #9
Добавлено: 22.11.06 17:45
ну да.. имеено о нем я и говорил.. )))