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

我在手动创建的 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;
    }
   }
 }
4

1 回答 1

1

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

编辑:

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

于 2012-06-20T10:05:58.627 回答