Обработчик событий срабатывает для всех элементов управления, а не индивидуально

У меня довольно странная проблема с элементом управления 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 ответ

Решение

Странный ответ, но я, кажется, решил проблему, DomClick вызывался при первом запуске, переход на DomMouseClick или DomMouseUp полностью решил проблему. Я предполагаю, что DomClick должен быть событием сам по себе, поскольку он также не использует GeckoDomMouseEventArgs, а является обычным GeckoEventArgs.

РЕДАКТИРОВАТЬ:

Чтобы добавить к этому, сайт, на котором я собирался, на самом деле вызывал DomClick, когда он закончил загрузку, поэтому причина, по которой он вызывался при запуске во всех трех браузерах.

Другие вопросы по тегам