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;
}
}
}