トップ回答者
WPF+WebBrowserでのマウスイベント

質問
-
Canvasに2つのWebBrowserを配置しています。マウスイベントは
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/81fbf565-0de9-4994-93ac-1f1fa6d9f389
を参考に実装しました。
しかし、2つあるWebBrowserのうちどちらのマウスイベント何かを判定することができません。
FormアプリならばWebbrowser.forcused()の戻り値で判定できますが、WPFでの場合どのようにすれば判定できるのでしょうか?
以上、よろしくお願い致します。
環境:
Windows7,VisualStudio2010、C#
回答
-
マウスイベントはClickイベントでしょうか? いずれにしてもHTMLDocumentEvents2_Eventのイベントハンドラの引数にはどのWebBrowserでクリックされたかの情報が入ってきませんから、自前で判断できるようにするしかなさそうです。どのWebBrowserにフォーカスがあるかの判断ではなく、以下のようにすれば十分ではないでしょうか?
private void webBrowser1_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e) { HTMLDocumentEvents2_Event eventHelper = (HTMLDocumentEvents2_Event)((WebBrowser)sender).Document; eventHelper.onclick += new HTMLDocumentEvents2_onclickEventHandler(OnMouseClick1); } private void webBrowser2_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e) { HTMLDocumentEvents2_Event eventHelper = (HTMLDocumentEvents2_Event)((WebBrowser)sender).Document; eventHelper.onclick += new HTMLDocumentEvents2_onclickEventHandler(OnMouseClick2); } private bool OnMouseClick1(IHTMLEventObj e) { return OnMouseClick(e, webBrowser1); } private bool OnMouseClick2(IHTMLEventObj e) { return OnMouseClick(e, webBrowser2); } private bool OnMouseClick(IHTMLEventObj e, WebBrowser browser) { System.Diagnostics.Debug.WriteLine(browser.Name); return false; // true will cause navigation to hyperlink if hyperlink clicked. }
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/- 回答としてマーク Prophet5 2011年6月5日 4:02
すべての返信
-
-
マウスイベントはClickイベントでしょうか? いずれにしてもHTMLDocumentEvents2_Eventのイベントハンドラの引数にはどのWebBrowserでクリックされたかの情報が入ってきませんから、自前で判断できるようにするしかなさそうです。どのWebBrowserにフォーカスがあるかの判断ではなく、以下のようにすれば十分ではないでしょうか?
private void webBrowser1_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e) { HTMLDocumentEvents2_Event eventHelper = (HTMLDocumentEvents2_Event)((WebBrowser)sender).Document; eventHelper.onclick += new HTMLDocumentEvents2_onclickEventHandler(OnMouseClick1); } private void webBrowser2_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e) { HTMLDocumentEvents2_Event eventHelper = (HTMLDocumentEvents2_Event)((WebBrowser)sender).Document; eventHelper.onclick += new HTMLDocumentEvents2_onclickEventHandler(OnMouseClick2); } private bool OnMouseClick1(IHTMLEventObj e) { return OnMouseClick(e, webBrowser1); } private bool OnMouseClick2(IHTMLEventObj e) { return OnMouseClick(e, webBrowser2); } private bool OnMouseClick(IHTMLEventObj e, WebBrowser browser) { System.Diagnostics.Debug.WriteLine(browser.Name); return false; // true will cause navigation to hyperlink if hyperlink clicked. }
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/- 回答としてマーク Prophet5 2011年6月5日 4:02
-
ご返答ありがとうございます
質問の便宜上「2つのWebbrowser」としただけで,実際には複数のWebbrowserを動的に生成しています.
動的にメソッドを生成する方法について調査いたします.
- 回答の候補に設定 Bobby Lawrence 2012年10月28日 18:27