Вы можете создать отдельный метод, который вы пометите как виртуальный, а затем вместо добавления обработчика событий в производную форму, просто вызовите виртуальный метод в исходной форме.
public Base : Form
{
public button1_Click(Object sender, EventArgs e)
{
DoSomethingOnClick();
}
protected virtual void DoSomethingOnClick()
{
// Do something here
}
}
Затем в производной форме вы можете переопределить DoSomethingOnClick, чтобы сделать то, что вам нужно:
public Derived : Base
{
private bool SpecificCondition = false;
protected override void DoSomethingOnClick()
{
if (SpecificCondition)
base.DoSomethingOnClick();
else
{
// Do something else here.
}
}
}
Это означает, что у вас есть только один обработчик события для события click, поэтому при щелчке он вызывает DoSomethingOnClick (), как это это виртуальный метод, который можно переопределить в производной форме и заставить делать что-то еще. Если у вас есть указанное c условие, при котором вы хотите, чтобы нажатие кнопки выполняло только метод базовых форм, тогда вы можете просто вызвать base.DoSomethingOnClick (), в противном случае вы вставляете свой код, чтобы сделать что-то еще.
Это избавляет вас от необходимости беспокоиться о подавлении событий щелчков, так как они существуют только один раз.