Я создаю пользовательскую кнопку (Winforms Control Library) и имею код ниже, чтобы весь mouseenter был добавлен ко всем элементам управления в моей кнопке. Когда я запускаю его, он вызывает исключение переполнения стека. У меня есть тот же код с Click вместо MouseEnter, и он отлично работает. Вот код:Почему мой код свойства события вызывает исключение переполнения стека?
public new event EventHandler MouseEnter {
add
{
this.MouseEnter += value;
foreach (Control i in Controls)
{
i.MouseEnter += value;
}
}
remove
{
this.MouseEnter -= value;
foreach (Control i in Controls)
{
i.MouseEnter -= value;
}
}
}
здесь код нажмите:
public new event EventHandler Click {
add {
this.Click += value;
foreach (Control i in Controls) {
i.Click += value;
}
}
remove {
this.Click -= value;
foreach (Control i in Controls) {
i.Click -= value;
}
}
}
Это работает, только если вы только поднимаете базовую версию 'Click'; ваша версия 'Click' стала не чем иным, как * вспомогательным методом для распространения подписки обработчика на дочерние элементы элемента управления. * ** Пожалуйста, не скрывайте эту логику за сумматором событий, просто сделайте четко названный и прокомментированный вспомогательный метод . ** – dlev