2009-03-16 8 views
7

WebBrowser 컨트롤을 C# 응용 프로그램에서 사용하고 WebBrowser에 포커스가있는 동안 모든 키 이벤트를 처리하려고합니다. 개별 내용 요소 (입력 필드, 링크 등)에 포커스가 있는지 여부에 관계 없습니다. 간단히 브라우저 컨트롤 KeyDown 이벤트에 이벤트 처리기를 추가하려고 시도했지만 작동하지 않습니다. 포커스가있는 각 객체에 핸들러를 명시 적으로 후크하지 않으려합니다. HtmlElement.WebBrowser 컨트롤에서 키 이벤트 처리

전에 전에 모든 키 이벤트를 받으면 브라우저 또는 해당 콘텐츠 요소로 전달할 수 있습니까?

답변

9

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! 
    } 
} 
+1

'WebBrowserShortcutsEnabled'가'False '로 설정되어 있어도 작동합니다. – prostynick

2

당신이 컨트롤에 대한 키를 누를 때 또는에서 KeyDown 이벤트가 없기 때문에 당신이 운이있는 웹 브라우저 컨트롤에서 Enter 키를 우회하는 등의 일을하십시오. 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 
0

로드 된 문서의 본문 요소에 키 처리기를 추가 할 수 있습니다. 기본적으로이 함수는 body 요소의 자식 요소에서 발생하는 동일한 이벤트를 catch합니다.

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 이벤트 처리기에서.

관련 문제