2011-03-02 39 views
5

我在Form中有一個WebBwoser,我想捕獲Ctrl + O組合鍵作爲菜單項的快捷方式。我的問題是,如果我點擊WebBrowser,然後按下Ctrl + O,則會彈出一個Internet Explorer對話框,而不是執行我的菜單項。我有我的FormKeyPreview屬性設置爲true。另外,我爲KeyDown事件添加了一個事件處理程序,但在單擊WebBrowser後,它不會再被調用。我怎樣才能解決這個問題?WebBrowser「竊取」我的表單中的KeyDown事件

回答

7

這應該可以解決您的問題。它禁用了Web瀏覽器的加速鍵。

webBrowser1.WebBrowserShortcutsEnabled = false; 

您可能想要了解是否需要IsWebBrowserContextMenuEnabled以及。

如果您需要某些加速鍵在瀏覽器中處於活動狀態,以下內容也可以解決您的問題。但是,這種方法需要一些東西來捕捉焦點。 MessageBox.Show()dialog.ShowDialog()可以做的工作

private void DoSomething() 
    { 
     webBrowser1.PreviewKeyDown += new PreviewKeyDownEventHandler(webBrowser1_PreviewKeyDown); 
    } 
    private void webBrowser1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 
    { 
     if (e.Control && e.KeyCode == Keys.O) 
     { 
      menuItem.PerformClick(); 
      // MessageBox.Show("Done"); 
     } 
    } 
+0

嗯,是唯一可能的解決方案嗎?我希望用戶能夠通過按Ctrl + F來執行其他操作。 – Juan 2011-03-02 08:39:10

+0

+1你通過網絡速度打我,當我試圖找到MSDN上的鏈接時,我的瀏覽器掛起: – 2011-03-02 08:39:58

+1

如上面我編輯的答案中所示,您可以捕獲webBrowser上的'PreviewKeyDown'。 – 2011-03-02 09:15:01

2

您可以覆蓋給ProcessCmdKey方法:

protected override bool ProcessCmdKey(ref Meassage msg, Keys keyDaya) 
{ 
    //Trap for Key down 

    return true; //false if you want to suppress the key press. 
}