【问题标题】:Capture the mouse right click event of a web browser control捕获 Web 浏览器控件的鼠标右键单击事件
【发布时间】:2012-07-10 06:46:24
【问题描述】:

当用户右键单击我的网络浏览器控件时,我想全选。

我正在开发一个 win forms 应用程序,并使用网络浏览器来显示我的信息,因为我可以使用 html 来设置文字样式。

右键单击上下文菜单对我不起作用。上面的选项都与我的应用无关。

但是我想保留选择后的上下文菜单,复制,剪切,粘贴选项。

我已经可以全选了:

getCurrentBrowser().Document.ExecCommand("SelectAll", true, null);

我只想在网页浏览器的右键事件中做?

【问题讨论】:

  • @Piskvor 这是一个win form应用程序,用C#Sharp完成,不涉及Jquery/JS,我也不想阻止右键菜单,所以这不可能重复!!
  • 那么,现在你是说没有网络浏览器控制?有趣...
  • @Piskvor 我没有说没有网络浏览器控件,我说它是一个获胜表单应用程序。

标签: c# winforms webbrowser-control


【解决方案1】:

处理MouseDown事件:

webBrowser.Document.MouseDown += new HtmlElementEventHandler(Document_MouseDown);

并确保用户按下右键,然后全选:

void Document_MouseDown(object sender, HtmlElementEventArgs e)
{
    if(e.MouseButtonsPressed == MouseButtons.Right)
    {
        webBrowser.Document.ExecCommand("SelectAll", true, null);
    }
}

【讨论】:

  • +1 谢谢,认为这是正确的做法并回答了所提出的问题。
【解决方案2】:

This 文章展示了如何将 Web 浏览器的上下文菜单替换为您自己的。

或者,如果您在 Web 浏览器中执行以下 Javascript,它将禁用默认的右键单击上下文菜单:

    document.oncontextmenu=new Function("return false")

如果您使用的是 WinForms 而不是 WPF,您可以将 IsWebBrowserContextMenuEnabled 设置为 false 以阻止 IE 上下文菜单,在这种情况下,它将使用您在 WebBrowser 控件上提供的 ContextMenu。

WPF 没有在 Web 浏览器上公开相同的属性,所以它可能不是那么容易。在这种情况下,您可能必须使用 WindowsFormsHost 在 WPF 中托管 WinForms Web 浏览器。

【讨论】:

  • + 1。感谢您的回答:),我确实设法找到了一个很棒的工作:)
【解决方案3】:

这行得通:)

当上下文菜单显示全选时,会推出我想要的上下文菜单,包括复制、粘贴、剪切等。

private void webCompareSQL_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            if (webCompareSQL.Document != null)
            {
                webCompareSQL.Document.ContextMenuShowing += DocMouseClick;
            }
        }
        void DocMouseClick(object sender, HtmlElementEventArgs e)
        {
            webCompareSQL.Document.ExecCommand("SelectAll", true, null);
        }

【讨论】:

  • 它并没有完全捕获右键单击事件,但是当单击 Web 浏览器时,上下文菜单显示将始终显示。所以这是一个很好的解决方法。
  • 如果 Document 为空怎么办?对于 PDF webbrowser Document 总是 null 。那么你将如何创建点击事件?
【解决方案4】:

您需要确保已加载 WebBrowser.Document 属性。然后就可以注册鼠标事件了。

`browser.DocumentCompleted += (s, e) => { browser.Document.MouseMove += (sM, eM) +=> { Debug.WriteLine(eM.ClientMousePosition.X); }; }; `

【讨论】:

    猜你喜欢
    • 2010-10-05
    • 2013-06-28
    • 2011-05-30
    • 2012-06-28
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 2012-02-24
    • 2021-09-10
    相关资源
    最近更新 更多