2

我的 WinForms 浏览器控件有 3 个上下文菜单。

BrowserImages、BrowserLinks 和 BrowserDefault。

  1. 右键单击文档的空白区域时加载默认值
  2. 右键单击链接时显示链接
  3. 并且当您猜到了图像被右键单击时,就会显示图像。

当 DocumentCompleted 被触发时,我添加了 Document_ContextMenuShowing 事件 - 代码是:

    /// <summary>
    /// Displays the Correct Context Menu for the element that is being right clicked on
    /// </summary>
    /// <param name="sender">
    /// HTMLDocument: The content of the web browser when the right click was detected.
    /// </param>
    /// <param name="e">
    /// HtmlElementEventArgs: Used for getting the location of the mouse so we know where to display the Context Menu
    /// </param>
    void Document_ContextMenuShowing(object sender, HtmlElementEventArgs e)
    {
        var res = (HtmlDocument)sender;

        if (res.ActiveElement.InnerHtml.ToLowerInvariant().Contains("img"))
        {
            cmsBrowserImages.Show(e.ClientMousePosition.X, e.ClientMousePosition.Y);
        }
        else if (res.ActiveElement.InnerHtml.ToLowerInvariant().Contains("href"))
        {
            cmsBrowserLinks.Show(e.ClientMousePosition.X, e.ClientMousePosition.Y);
        }
        else
        {
            cmsBrowserDefault.Show(e.ClientMousePosition.X, e.ClientMousePosition.Y);
        }
    }

有没有更好、更健壮(更好的工作)的方法来做到这一点?首选 C# 代码,但 VB.Net 可以,很容易重写。

谢谢

4

1 回答 1

2

我会使用document.elementFromPoint而不是依赖document.activeElement.

于 2013-10-11T06:57:37.013 回答