.net Web 浏览器控件

本文关键字:控件 浏览器 Web net | 更新日期: 2023-09-27 17:47:21

我在Visual Studio中使用Web浏览器控件。我认为它是互联网浏览器的包装器。无论如何,一切顺利,我在编辑模式下使用它,但是我无法触发文档的键控事件(为了捕获ctrl + v)有人遇到类似的问题吗?

有人有解决方案吗?

.net Web 浏览器控件

实际上,Web 浏览器控件只是 IE 浏览器控件的包装器。您的问题是控件预览键不起作用吗? 只要控件有焦点,似乎对我有用。

 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 控件派生类中的 "WndProc()" 方法或包含 Web 浏览器的窗体。或者,您可以使用自定义消息过滤器(应用程序.添加消息过滤器)捕获密钥。通过这种方式,您还可以过滤鼠标操作。

几年前我也有同样的问题,但我不记得我使用了哪种方式。

你提到了"文档"的KeyDown事件。 如果您引用 WebBrowser 控件的 Document 属性(类型 HtmlDocument),则它只有 MouseUp、MouseDown 等事件,而没有键盘事件。 您希望向 WebBrowser 控件的 PreviewKeyDown 委托注册事件处理程序。 您可能还希望将 WebBrowser 控件的 WebBrowserShortcutsEnabled 属性的值设置为 false,如果您不希望标准 Internet Explorer 快捷方式具有其通常的效果。 还应通过手动调用 Web 浏览器控件的 Focus() 方法并将窗体上其他控件的 TabStop 属性设置为 false,确保 Web 浏览器控件处于焦点中。 如果由于窗体上有其他控件需要接受焦点而无法做到这一点,则可能还需要为窗体本身的 KeyDown 事件添加事件处理程序。

如何使用

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);  
}