Обработка ключевых событий в элементе управления WebBrowser - PullRequest
7 голосов
/ 16 марта 2009

Я использую элемент управления WebBrowser в приложении C # и хочу обрабатывать все ключевые события, пока фокус имеет WebBrowser, независимо от того, на каком фокусе находится отдельный элемент контента (поле ввода, ссылка и т. Д.). Я попытался просто добавить обработчик событий в элемент управления браузера KeyDown, но это не работает. Я не хочу явно привязывать обработчик к каждому фокусируемому HtmlElement.

Как получить все ключевые события до их передачи в браузер или его элементы содержимого?

Ответы [ 3 ]

9 голосов
/ 17 июня 2009

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

private void wb_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    // your code handling the keys here, like:
    if (e.Control && e.KeyCode == Keys.C)
    {
        // Do something funny!
    }
}
2 голосов
/ 20 июля 2012

Если вы хотите сделать что-то вроде обхода клавиши Enter в элементе управления WebBrowser, вам не повезло, потому что для элемента управления нет событий KeyPress или KeyDown. KeyPreviewDownEventArgs не предоставляет никакого способа обойти нажатие клавиши. Единственный способ сделать это - переопределить функцию ProcessCmdKey формы, в которой находится элемент управления. Например:

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean

    If keyData <> Keys.Enter Then Return MyBase.ProcessCmdKey(msg, keyData)
    Return True

End Function
1 голос
/ 04 октября 2016

Вы можете добавить ключевые обработчики к элементу Body загруженного документа. По умолчанию это ловит то же событие, которое происходит в любом дочернем элементе элемента body.

webBrowser.Document.Body.KeyDown += MyKeyDownHandler;
...
private void MyKeyDownHandler(object sender, HtmlElementEventArgs e)
{
    // Set e.ReturnValue false if you want to cancel the key press
}

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

...