我正在捕获PictureBox内的单击坐标,但是我想使用WebBrowser实现相同的目的。经过一些研究,我发现不可能订阅Click
WebBrowser控件的Mouse事件。
捕获点击的可能方法有哪些?是否有某种元素可以让我浏览页面但仍然捕获点击?
我尝试创建一个透明面板,但是透明的颜色并不代表我所看到的透明,并且当元素位于背面时也无法捕获点击,因此能够在面板位于WebBrowser后面的情况下捕获点击也可以。
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;
}
}
WebBrowser本身不提供“鼠标单击”坐标:您实际上不是在Control客户区域上单击,而是在单击HtmlDocument的内容。
您可以使用HtmlDocument.Click或HtmlDocument.MouseDown事件来检索初始化的 HtmlDocument上的鼠标指针坐标。
注:
该HtmlElementEventArgs对象返回两个绝对坐标鼠标坐标(整个文档区域),在e.ClientMousePosition并且相对于点击HtmlElement
,在e.OffsetMousePosition。
这可能很棘手,因为Click
在创建当前HtmlDocument时需要订阅该事件:您不能订阅默认Document对象
的事件:即,使用以下方式订阅该事件Form.Load
:
webBrowser1.Document.Click += (obj, evt) => { /*Do something */ };
不会完成任何事情。该事件永远不会引发:null
因此,文档当然不是当前/活动的HtmlDocument的引用。
HtmlDocument
当引发WebBrowser.DocumentCompleted事件并将其ReadyState设置为时,一个就绪WebBrowserReadyState.Complete
。
您可以Document.Click
在文档完全加载后订阅事件,然后在WebBrowser导航到新页面之前创建新文档,然后删除该事件。
此外,该DocumentCompleted
事件可能会在单个HTML
页面上引发多次,因此您需要确保不要多次订阅同一事件:
注意:
AHtmlDocument
可能包含一个以上的元素Frame/IFrame
,每个Frame
元素都有自己的元素HtmlDocument
; IFrames
肯定有一个。有关此问题的更多信息,请参考此问题中的注释:
如何在Frames / IFrames中获取HtmlElement值?
一个例子:
bool WebBrowserDocumentEventSet = false;
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser wb = (sender as WebBrowser);
if (wb.ReadyState == WebBrowserReadyState.Complete && WebBrowserDocumentEventSet == false)
{
WebBrowserDocumentEventSet = true;
wb.Document.MouseDown += this.OnHtmlDocumentClick;
}
}
private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
(sender as WebBrowser).Document.MouseDown -= this.OnHtmlDocumentClick;
WebBrowserDocumentEventSet = false;
}
protected void OnHtmlDocumentClick(object sender, HtmlElementEventArgs e)
{
Console.WriteLine(e.ClientMousePosition);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句