2009-03-16 11 views
7

Ich verwende das WebBrowser Steuerelement in einer C# -Anwendung und möchte alle wichtigen Ereignisse behandeln, während der WebBrowser den Fokus hat, unabhängig davon, welche einzelnen Inhaltselement (Eingabefeld, Link usw.) fokussiert ist. Ich habe versucht, einfach einen Event-Handler zu Browser-Controls KeyDown Event hinzuzufügen, aber das funktioniert nicht. Ich möchte nicht explizit einen Handler zu jedem fokussierbaren HtmlElement anhaken.Umgang mit Schlüsselereignissen im WebBrowser Steuerelement

Wie kann ich alle wichtigen Ereignisse erhalten vor werden sie an den Browser oder seine Inhaltselemente übergeben?

Antwort

9

Sie haben die PreviewKeyDown Ereignis einfach nur anschließen.

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

Es funktioniert auch, wenn 'WebBrowserShortcutsEnabled' auf' False' gesetzt ist – prostynick

2

Wenn Sie etwas tun, wie die in dem WebBrowser-Steuerelement Enter-Taste Umgehen Sie kein Glück, weil es keine KeyPress oder KeyDown Ereignisse für das Steuerelement ist. KeyPreviewDownEventArgs bietet keine Möglichkeit, einen Tastendruck zu umgehen. Die einzige Möglichkeit, das auszuführen, besteht darin, die ProcessCmdKey-Funktion des Formulars zu übersteuern, das das Steuerelement hostet. Beispiel:

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

Sie können dem Body-Element des geladenen Dokuments Schlüsselhandler hinzufügen. Standardmäßig wird das gleiche Ereignis in einem untergeordneten Element des body-Elements abgefangen.

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

Ich denke, der Handler muss hinzugefügt werden, nachdem das Dokument geladen hat, z. im DocumentCompleted-Ereignishandler.