我在visual studio中使用webbrowser控件。我认为它是Internet Explorer的一个包装器。无论如何一切都很顺利我在编辑模式下使用它然而我无法得到文档的keydown事件(为了捕获ctrl + v)任何人都有类似的问题吗?
任何人都有解决方案吗?
答案 0 :(得分:3)
实际上,webbrowser控件只是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 :(得分:1)
您应该从WebBrowser控件或包含webbrowser的表单中覆盖派生类中的“WndProc()”方法。或者您可以使用自定义消息过滤器(Application.AddMessageFilter)捕获密钥。通过这种方式,您还可以过滤鼠标操作。
多年前我遇到过同样的问题,但我不记得我用过哪种方式。
答案 2 :(得分:1)
您提到了'文档'的KeyDown事件。如果您指的是WebBrowser控件的Document属性(键入HtmlDocument),它只有MouseUp,MouseDown等事件,但不包括键盘事件。您希望使用WebBrowser控件的PreviewKeyDown委托注册事件处理程序。如果您不希望标准Internet Explorer快捷方式具有其通常的效果,您可能还希望将WebBrowser控件的WebBrowserShortcutsEnabled属性的值设置为false。您还应通过手动调用其Focus()方法并将窗体上其他控件的TabStop属性设置为false来确保WebBrowser控件处于焦点。如果由于您在表单上有其他需要接受焦点的控件而无法做到这一点,您还可能希望为Form本身的KeyDown事件添加事件处理程序。
答案 3 :(得分:0)
How to trap keystrokes in controls by using Visual C#
e.g。
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);
}