2008-10-22 171 views
2

我在visual studio中使用webbrowser控件。我認爲這是一個圍繞Internet Explorer的包裝。無論如何,一切都很順利,我在編輯模式下使用它,但我不能讓他文檔的keydown事件觸發(爲了趕上ctrl + v)任何人都有類似的問題呢?.net網頁瀏覽器控件

任何人都有解決方案?

回答

3

事實上,瀏覽器控件只是IE瀏覽器控件的一個包裝。 是你的問題,控件PreviewKeyDown不工作?似乎只要控制有重點就可以爲我工作。

webBrowser1.PreviewKeyDown += new PreviewKeyDownEventHandler(webBrowser1_PreviewKeyDown);  

.... 

private void webBrowser1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e) { 
    Console.WriteLine(e.KeyCode.ToString() + " " + e.Modifiers.ToString()); 
    if (e.Modifiers == Keys.Control && e.KeyCode == Keys.V) { 
     MessageBox.Show("ctrl-v pressed"); 
    } 
} 

但也許我不完全理解?

1

您應該從WebBrowser控件或包含web瀏覽器的表單中重寫派生類中的「WndProc()」方法。或者您可以使用自定義消息過濾器(Application.AddMessageFilter)捕獲密鑰。通過這種方式,您還可以過濾鼠標操作。

幾年前我有同樣的問題,但我不記得我使用了哪種方式。

1

您提到了'文檔'的KeyDown事件。如果引用WebBrowser控件的Document屬性(鍵入HtmlDocument),它只有MouseUp,MouseDown等事件,但不包含鍵盤事件。您想要使用WebBrowser控件的PreviewKeyDown委託註冊您的事件處理程序。如果不希望標準Internet Explorer快捷方式具有其通常的效果,則可能還需要將WebBrowser控件的WebBrowserShortcutsEnabled屬性的值設置爲false。您還應該通過手動調用其Focus()方法並將窗體上其他控件的TabStop屬性設置爲false來確保WebBrowser控件處於焦點狀態。如果這是不可能的,因爲表單上需要接受焦點的其他控件,則還可能需要爲Form本身的KeyDown事件添加事件處理程序。

0

How to trap keystrokes in controls by using Visual C#

例如,

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    const int WM_KEYDOWN = 0x100; 
    const int WM_SYSKEYDOWN = 0x104; 

    if ((msg.Msg == WM_KEYDOWN) || (msg.Msg == WM_SYSKEYDOWN)) 
    { 
     switch(keyData) 
     { 
     case Keys.Down: 
      this.Parent.Text="Down Arrow Captured"; 
      break; 

... 

     } 
    } 

    return base.ProcessCmdKey(ref msg,keyData); 
}