2009-03-16 9 views
7

J'utilise le contrôle WebBrowser dans une application C# et je souhaite gérer tous les événements clés alors que le WebBrowser a le focus, quel que soit l'élément de contenu individuel (champ de saisie, lien, etc.). J'ai essayé d'ajouter simplement un gestionnaire d'événements aux événements KeyDown du navigateur, mais cela ne fonctionne pas. Je ne veux pas explicitement accrocher un gestionnaire à chaque focusable HtmlElement.Gestion des événements de touche sur le contrôle WebBrowser

Comment puis-je recevoir tous les événements clés avant ils sont passés au navigateur ou à ses éléments de contenu?

Répondre

9

vous avez l'événement PreviewKeyDown juste le brancher.

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

Cela fonctionne même si 'WebBrowserShortcutsEnabled' est défini sur 'False' – prostynick

2

Si vous voulez faire quelque chose comme contourner la touche Entrée dans le contrôle WebBrowser vous êtes hors de la chance parce qu'il n'y a pas KeyPress ou d'événements KeyDown pour le contrôle. KeyPreviewDownEventArgs ne fournit aucun moyen de contourner une touche. La seule façon de faire cela est de surcharger la fonction ProcessCmdKey du formulaire qui héberge le contrôle. Par exemple:

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

Vous pouvez ajouter des gestionnaires de clés à l'élément Body du document chargé. Par défaut, le même événement se produit dans n'importe quel élément enfant de l'élément 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 
} 

Je pense que le gestionnaire doit être ajouté après le chargement du document, par ex. dans le gestionnaire d'événements DocumentCompleted.

Questions connexes