2009-03-16 20 views
7

Sto utilizzando il controllo WebBrowser in un'applicazione C# e desidero gestire tutti gli eventi chiave mentre lo WebBrowser è attivo, indipendentemente da quale elemento di contenuto individuale (campo di input, collegamento ecc.) È focalizzato. Ho provato a aggiungere semplicemente un gestore di eventi ai controlli del browser KeyDown evento, ma questo non funziona. Non voglio collegare in modo esplicito un gestore a ciascun focusable HtmlElement.Gestione eventi chiave sul controllo WebBrowser

Come posso ricevere tutti gli eventi chiave prima del vengono passati al browser o ai suoi elementi di contenuto?

risposta

9

l'evento PreviewKeyDown è sufficiente collegarlo.

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

Funziona anche se 'WebBrowserShortcutsEnabled' è impostato su' False' – prostynick

2

Se si vuole fare qualcosa di simile a eludere il tasto Invio nel controllo WebBrowser si è fuori di fortuna perché non c'è KeyPress o KeyDown eventi per il controllo. KeyPreviewDownEventArgs non fornisce alcun modo per eludere la pressione di un tasto. L'unico modo per farlo è sovrascrivere la funzione ProcessCmdKey del modulo che ospita il controllo. Ad esempio:

0

È possibile aggiungere gestori di chiavi all'elemento Corpo del documento caricato. Di default questo cattura lo stesso evento che si verifica in qualsiasi elemento figlio dell'elemento 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 
} 

Penso che il gestore debba essere aggiunto dopo che il documento è stato caricato, ad es. nel gestore di eventi DocumentCompleted.

Problemi correlati