【问题标题】:Event handler firing for all controls instead of individually为所有控件触发事件处理程序,而不是单独触发
【发布时间】:2012-06-20 08:50:00
【问题描述】:

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

【问题讨论】:

    标签: c# .net events geckofx


    【解决方案1】:

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

    编辑:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-22
      • 2013-11-23
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 1970-01-01
      • 2012-04-15
      • 2011-09-07
      相关资源
      最近更新 更多