Не переопределяется, скрывается или скрывается ключевым словом new
.Вы не подписались на новое событие, вы подписались на событие базового класса.Это в основном, как полиморфизм работает.
Если вы хотите вызвать событие Validating
пользовательского элемента управления при проверке дочернего элемента управления, обработайте событие Validating
дочернего элемента управления и вызовите метод OnValidating
методапользовательский контроль.
Если вы хотите переопределить метод Validating
переопределения события OnValidating
.
Если вы хотите изменить отправителя Validating
событие, вам нужно изменить способ вызова события Validating
.Для этого вам нужно использовать отражение и найти событие и напрямую вызвать его самостоятельно.
Пример - Возбуждение события валидации UserControl, когда дочерний элемент управления проверяет
Если вы хотите вызвать Validating
событие вашего элемента управления при проверке дочернего текстового поля, обработайте Validating
событие дочернего элемента управления и вызовите ``
public MyControl()
{
InitializeComponent();
txt.Validating += (obj, args) => OnValidating(args);
}
Пример - событие переопределения проверки
protected override void OnValidating(CancelEventArgs e)
{
// Add custom code here.
base.OnValidating(e);
}
Пример - Возбуждение события Validating
вручную без вызова base.OnValidating
Если по какой-то причине вы этого не сделаетехотите вызвать base.OnValidating
, в то время как его ответственность в основном заключается в создании события Validating
, вы можете найти событие и вызвать его напрямую:
protected override void OnValidating(CancelEventArgs e)
{
var f = typeof(Control).GetField("EventValidating",
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.Static);
var validating = (CancelEventHandler)Events[f.GetValue(this)];
validating?.Invoke(this, e);
}
Сделав это, например, вы можете установить другого отправителя, такого какдочерний контроль вместо this
.