1

Gecko Webbrowser コントロールでかなり奇妙な問題が発生しています。Gecko Webcontrol を継承する独自のクラスを作成し、このコンストラクター内でイベントを設定しました。

class fooGeckoClass: Gecko.GeckoWebBrowser
{
  public fooGeckoClass()
  {
    this.DomClick += new EventHandler<Gecko.GeckoDomEventArgs>(fooEventFunction);
  }

  private static void fooEventFunction(Object sender, Gecko.GeckoDomEventArgs e)
  {
    ((Gecko.GeckoWebBrowser)sender).Navigate("www.foo.com");
  }
}

これらのコントロールのうち 3 つを手動で作成した UserControl で使用しています。コントロールは起動時に構成ファイルから動的に読み込まれ、UserControl コントロール コレクションが追加されます。3 つのコントロールのいずれかをクリックすると、3 つすべてが元のサイトから離れた "www.foo.com" に移動します。私は見ていた:

e.StopPropagation();

これは、イベント フロー中のイベントのそれ以上の伝播を停止することを指定しますが、現在のフロー内のすべてのイベントを処理することも指定します。これが停止する機会を得る前に、イベントが既にコントロールに与えられている必要があると思います3 つのコントロールが引き続きイベントを発生させるためです。私も試しました e.Handled = true 無駄に。誰かが以前にこの問題に遭遇したことがあり、クリックされたコントロールでのみ起動するための解決策がありますか?

編集:

ここで問題が発生しているはずなので、フォームにコントロールを追加する方法を示す価値があるかもしれません (コントロールが小さなテスト アプリのユーザー コントロールに配置されている場合は発生しません)。

private void fooUserControl_Load(object sender, EventArgs e)
{
  if (!this.DesignMode)
  {
    for (int iControls = 0; iControls < geckObs.Count(); iControls ++)
    {
          fooGeckoClass geckControl = new fooGeckoClass();
          this.Controls.Add(geckControl );
          break;
    }
   }
 }
4

1 に答える 1

1

奇妙な答えですが、問題を解決したようです。DomClick は最初の実行時に呼び出されていました。DomMouseClick または DomMouseUp に変更すると、問題は完全に解決されました。DomClick も GeckoDomMouseEventArgs を使用せず、通常の GeckoEventArgs を使用するため、DomClick はそれ自体がイベントである必要があると思います。

編集:

これに加えて、私が訪問しようとしていたサイトは、ロードが終了したときに実際に DomClick を呼び出していたため、3 つのブラウザーすべてで起動時に呼び出されていました。

于 2012-06-20T10:05:58.627 に答える