WinForm浏览器控件右键单击了哪个元素?

时间:2013-10-11 05:57:43

标签: c# vb.net winforms webbrowser-control

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

BrowserImages,BrowserLinks和BrowserDefault。

  1. 右键单击文档的空白区域时会加载默认值 上
  2. 上右键单击链接时会显示链接
  3. 和图像显示在 - 您猜对了 - 右键单击​​图像。
  4. 当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将很容易重写。

    由于

1 个答案:

答案 0 :(得分:2)

我会使用document.elementFromPoint而非依赖document.activeElement