Обработчик событий срабатывает для всех элементов управления, а не индивидуально
У меня довольно странная проблема с элементом управления 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, когда он закончил загрузку, поэтому причина, по которой он вызывался при запуске во всех трех браузерах.