事件处理程序为所有控件而不是单独触发

时间:2012-06-20 08:50:00

标签: c# .net events geckofx

我对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");
  }
}

我在手动创建的UserControl中使用其中三个控件,控件在从配置文件启动时动态加载并添加了UserControl控件集合。当点击三个控件中的任何一个时,这三个控件都将远离原始站点导航到“www.foo.com”。我看了看:

e.StopPropagation();

它指定它在事件流期间停止事件的进一步传播,但是它也指定它将处理当前流中的所有事件,我相信在事件有机会之前必须已经将事件提供给控件停止它,因为三个控件仍将触发事件。我也试过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;
    }
   }
 }

1 个答案:

答案 0 :(得分:1)

奇怪的答案,但我似乎已经解决了这个问题,DomClick在第一次运行时被调用,改为DomMouseClick或DomMouseUp已完全解决了这个问题。我认为DomClick必须是一个事件本身,因为它也不使用GeckoDomMouseEventArgs而是常规的GeckoEventArgs。

编辑:

除此之外,我要访问的网站在完成加载时实际上是在调用DomClick,因此它是在所有三个浏览器启动时调用它的原因。