【问题标题】:.net webbrowser control.net 网络浏览器控件
【发布时间】:2008-10-22 17:14:16
【问题描述】:

我在 Visual Studio 中使用 webbrowser 控件。我认为它是 Internet Explorer 的包装器。无论如何一切都很顺利我在编辑模式下使用它但是我无法让他触发文档的 keydown 事件(为了捕捉 ctrl+v)有人遇到过类似的问题吗?

谁有解决办法?

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    实际上,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");
         }
     }
    

    但也许我没有完全理解?

    【讨论】:

      【解决方案2】:

      您应该在 WebBrowser 控件的派生类中或在包含 Web 浏览器的表单中覆盖“WndProc()”方法。或者您可以使用自定义消息过滤器 ( Application.AddMessageFilter ) 捕获键。通过这种方式,您还可以过滤鼠标操作。

      几年前我也遇到过同样的问题,但我不记得我使用的是哪种方式。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2011-03-19
            • 1970-01-01
            • 2011-10-06
            • 1970-01-01
            • 1970-01-01
            • 2010-12-02
            • 2012-03-26
            • 2011-11-09
            • 2012-10-30
            相关资源
            最近更新 更多