如何判断 WebBrowser 控件中的哪个被点击了






4.65/5 (18投票s)
本文解释了如何获取 WebBrowser 控件中被点击的 HTML 元素。
引言
这是我的第一次提交。它很小,对初学者会有帮助。
本文将演示如何确定在 WebBrowser
控件内的光标下选择的内容,并使用您自己的自定义 ContextMenu
。您是否曾经希望替换默认的 Internet Explorer ContextMenu
? 这应该可以帮助您完全实现该目标。
背景
我目前正在为孩子们编写一个 WebBrowser
应用程序。一切都运行良好,我认为我快完成了……除了那个令人讨厌的 - 显然是 Internet Explorer - ContextMenu
。
让自定义 ContextMenu
工作不是本文的重点,因为它可以通过几个简单的步骤来实现。本文的重点是能够提供接近 Internet Explorer 呈现的功能,通过为页面上的不同元素提供不同的菜单。
例如,点击图像时显示“保存图片”,点击链接时显示“复制快捷方式”。
使用代码
我包含了一个示例项目,其中概述了这里的内容。
首先,我们需要将屏幕上的鼠标坐标转换为 Point
对象
Point ScreenCoord = new Point(MousePosition.X, MousePosition.Y);
现在,我们必须基于屏幕坐标创建浏览器的坐标
Point BrowserCoord = webBrowser1.PointToClient(ScreenCoord);
现在我们可以使用 WebBrowser
文档的 GetElementFromPoint
方法来检索被点击的元素
HtmlElement elem = webBrowser1.Document.GetElementFromPoint(BrowserCoord);
现在,我们可以使用这个元素来查看点击了什么
switch (elem.TagName)
{
case "A":
//! We have clicked a link
break;
case "IMG":
//! We have clicked an image
break;
default:
//! This is anywhere else
break;
}
关注点
为此方法我绞尽脑汁了很长时间。我找不到任何东西,甚至在 The Code Project 上也没有找到。所以我认为这对一些人会有帮助。请注意,一旦您获得了该元素,就可以对其进行任何操作,例如使用 GetAttribute
来检索图像的 SRC 以进行下载等。
历史
- 2009/1/7 - 首次提交 - 老实说,这就是我需要的!
- 2009/1/8 - 尝试澄清文章的目标