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自体はマウスクリック座標を提供しません。実際にはコントロールクライアント領域をクリックするのではなく、HtmlDocumentのコンテンツをクリックします。
HtmlDocument.ClickまたはHtmlDocument.MouseDownイベントを使用して、初期化された HtmlDocumentのマウスポインタ座標を取得できます。
注:HtmlElementEventArgsオブジェクトがで、両方の絶対座標(文書全体の領域)でのマウス座標を返しe.ClientMousePositionとクリックに対してにおいて、e.OffsetMousePosition。HtmlElement
Click
現在のHtmlDocumentがすでに作成されているときにイベントをサブスクライブする必要があるため、これは注意が必要です。デフォルトのDocumentオブジェクトのイベントをサブスクライブすることはできません。
つまり、次のコマンドでイベントをサブスクライブしますForm.Load
。
webBrowser1.Document.Click += (obj, evt) => { /*Do something */ };
何も達成しません。イベントが発生することはありません。null
したがって、ドキュメントはもちろん、現在の/アクティブなHtmlDocumentを参照するものではありません。
HtmlDocument
準備ができたらあるWebBrowser.DocumentCompletedイベントが発生し、そのreadyStateのがに設定されていますWebBrowserReadyState.Complete
。
Document.Click
ドキュメントが完全に読み込まれたときにイベントをサブスクライブし、WebBrowserが新しいページに移動して新しいドキュメントを作成する前にイベントを削除できます。
また、DocumentCompleted
1つのHTML
ページでイベントが複数回発生する可能性があるため、同じイベントを複数回サブスクライブしないようにする必要があります。
注:
AにHtmlDocument
は複数が含まFrame/IFrame
れるFrame
場合があり、それぞれに独自のHtmlDocument
;が含まれる場合があります。IFrames
確かにそれぞれ1つ持っています。この問題の詳細については、この質問のメモを参照してください:
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]
コメントを追加