我在visual studio中使用webbrowser控件。我認爲這是一個圍繞Internet Explorer的包裝。無論如何,一切都很順利,我在編輯模式下使用它,但我不能讓他文檔的keydown事件觸發(爲了趕上ctrl + v)任何人都有類似的問題呢?.net網頁瀏覽器控件
任何人都有解決方案?
我在visual studio中使用webbrowser控件。我認爲這是一個圍繞Internet Explorer的包裝。無論如何,一切都很順利,我在編輯模式下使用它,但我不能讓他文檔的keydown事件觸發(爲了趕上ctrl + v)任何人都有類似的問題呢?.net網頁瀏覽器控件
任何人都有解決方案?
事實上,瀏覽器控件只是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");
}
}
但也許我不完全理解?
您應該從WebBrowser控件或包含web瀏覽器的表單中重寫派生類中的「WndProc()」方法。或者您可以使用自定義消息過濾器(Application.AddMessageFilter)捕獲密鑰。通過這種方式,您還可以過濾鼠標操作。
幾年前我有同樣的問題,但我不記得我使用了哪種方式。
您提到了'文檔'的KeyDown事件。如果引用WebBrowser控件的Document屬性(鍵入HtmlDocument),它只有MouseUp,MouseDown等事件,但不包含鍵盤事件。您想要使用WebBrowser控件的PreviewKeyDown委託註冊您的事件處理程序。如果不希望標準Internet Explorer快捷方式具有其通常的效果,則可能還需要將WebBrowser控件的WebBrowserShortcutsEnabled屬性的值設置爲false。您還應該通過手動調用其Focus()方法並將窗體上其他控件的TabStop屬性設置爲false來確保WebBrowser控件處於焦點狀態。如果這是不可能的,因爲表單上需要接受焦點的其他控件,則還可能需要爲Form本身的KeyDown事件添加事件處理程序。
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);
}