我在PictureBox中捕获单击坐标,但我想用WebBrowser实现同样的事情。经过一些研究,我发现它是不可能订阅鼠标Click
事件的WebBrowser控件。
有哪些可能的方法来捕捉点击?有没有一种元素可以让我在页面中导航,但仍然可以捕获点击?
我试图创建一个透明的面板,但透明的颜色并不意味着看到通过我看到的,当元素在后面也不捕捉点击,能够捕捉点击与面板背后的Web浏览器也将工作。
PictureBox代码:
private void uploadedPNG_MouseClick(object sender, MouseEventArgs e)
{
if(uploadedPNG.Image != null && !string.IsNullOrEmpty(deviceHeight.Text) && !string.IsNullOrEmpty(deviceWidth.Text))
{
mouseX = e.X;
mouseY = e.Y;
targetHeight = Int32.Parse(deviceHeight.Text);
targetWidth = Int32.Parse(deviceWidth.Text);
int outPutWidth = (mouseX * targetWidth) / uploadedPNG.Width;
int outPutHeight = (mouseY * targetHeight) / uploadedPNG.Height;
ConsoleText.Text = "Clicked X coordinate " + outPutWidth + " Clicked Y coordinate " + outPutHeight;
}
}
1条答案
按热度按时间kt06eoxx1#
WebBrowser本身不提供鼠标点击坐标:你实际上并没有点击Control客户端区域,你点击的是HtmlDocument的内容。
您可以使用HtmlDocument.Click或HtmlDocument.MouseDown事件检索初始化HtmlDocument上的鼠标指针坐标。
备注:
HtmlElementEventArgs对象返回鼠标的绝对坐标(整个文档区域),在e.ClientMousePosition中,以及相对于单击的
HtmlElement
,在e.OffsetMousePosition中。这可能很棘手,因为当当前HtmlDocument已经创建时,您需要订阅
Click
事件:您不能订阅默认Document对象的事件:即,订阅
Form.Load
中的事件,其中:不会有任何成就永远不会引发该事件:文档是
null
,因此,当然,它不引用任何当前/活动的HtmlDocument。HtmlDocument
在WebBrowser.DocumentCompleted事件被引发并且其ReadyState被设置为**WebBrowserReadyState.Complete
**时就绪。您可以在完全加载文档时订阅
Document.Click
事件,然后在WebBrowser导航到新页面之前删除该事件,从而创建新文档。此外,
DocumentCompleted
事件可能会为单个HTML
页面引发多次,因此您需要确保不会多次订阅同一事件:备注:
一个
HtmlDocument
可以包含一个以上的**Frame/IFrame
,每个Frame
可以有自己的HtmlDocument
;IFrames
**每个人都有一个肯定的。有关此问题的更多信息,请参阅此问题中的注解:How to get an HtmlElement value inside Frames/IFrames?
举个例子: