PoY*_*oYo 4 .net c# webbrowser-control winforms
我在 PictureBox 中捕获点击坐标,但我想用 WebBrowser 实现同样的目标。经过一番研究,我发现无法订阅ClickWebBrowser 控件的鼠标事件。
捕获点击的可能方法有哪些?是否有一种元素可以让我浏览页面但仍然捕获点击?
我尝试创建一个透明面板,但透明颜色并不意味着我看到的透明,并且当元素在后面时也不会捕获点击,如果面板位于 WebBrowser 后面,则能够捕获点击也可以.
图片框代码:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
WebBrowser 本身不提供鼠标单击坐标:您实际上不是单击控件客户区,而是单击 HtmlDocument 的内容。
您可以使用HtmlDocument.Click或HtmlDocument.MouseDown事件来检索初始化的 HtmlDocument上的鼠标指针坐标。
注:
该HtmlElementEventArgs对象返回两个绝对坐标鼠标坐标(整个文档区域),在e.ClientMousePosition并且相对于点击HtmlElement,在e.OffsetMousePosition。
这可能很棘手,因为您需要Click在当前 HtmlDocument 已经创建时订阅事件:您不能订阅默认 Document 对象
的事件:即,订阅事件Form.Load:
webBrowser1.Document.Click += (obj, evt) => { /*Do something */ };
Run Code Online (Sandbox Code Playgroud)
不会完成任何事情。永远不会引发该事件:null因此,文档当然不是任何当前/活动 HtmlDocument 的引用。
一个HtmlDocument是准备当WebBrowser.DocumentCompleted引发事件和它的readyState设置为WebBrowserReadyState.Complete。
您可以Document.Click在文档完全加载时订阅该事件,然后在 WebBrowser 导航到新页面以创建新文档之前删除该事件。
此外,该DocumentCompleted事件可能会针对单个HTML页面多次引发,因此您需要确保不会多次订阅同一事件:
注意:
AHtmlDocument可能包含多个Frame/IFrame,每个Frame可能有自己的HtmlDocument;IFrames一定要每人一份。有关此问题的更多信息,请参阅此问题中的注释:
How to get an HtmlElement value inside Frames/IFrames?
一个例子:
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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1195 次 |
| 最近记录: |