none
WPF+WebBrowserでのマウスイベント RRS feed

回答

  • マウスイベントは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
    2011年6月4日 14:36
    モデレータ

すべての返信

  • こんにちは。

    リンク先をほぼまるまるコピーしたと仮定して。

    >2つあるWebBrowserのうちどちらのマウスイベント何かを判定することができません。

    WebBrowserが2つあるなら、別々のHTMLDocumentEvents2_Eventを作り、それぞれのWebBrowser.Documentをセットすれば良いと思われます。

    # これは、Form,WPF以前の問題ですね。たとえFormだとしてもWebbrowser.forcusedで判定すべきではないでしょう。
    # イベントの考え方を勉強してみてください。


    以上、がんばってください。

    2011年6月4日 14:31
  • マウスイベントは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
    2011年6月4日 14:36
    モデレータ
  • ご返答ありがとうございます

    質問の便宜上「2つのWebbrowser」としただけで,実際には複数のWebbrowserを動的に生成しています.

    動的にメソッドを生成する方法について調査いたします.

    2011年6月5日 4:06
  • HTMLDocumentEvents2_Eventはどのように定義されている

    2012年10月28日 18:27
  • HTMLDocumentEvents2_Eventはどのように定義されている
    2012年10月28日 18:28