在WebBrowser文档中获取鼠标单击坐标

婆Y

我正在捕获PictureBox内的单击坐标,但是我想使用WebBrowser实现相同的目的。经过一些研究,我发现不可能订阅ClickWebBrowser控件的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.ClickHtmlDocument.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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章