Предотвратить запуск события в производной форме - PullRequest
0 голосов
/ 18 марта 2020

У меня есть базовая форма и производная форма. Предположим, у меня есть только одна кнопка в базовой форме, а производная форма также использует ту же кнопку.

enter image description here

Я хочу, чтобы событие нажатия кнопки не срабатывало на производная форма, если условие не выполнено в событии щелчка базовой формы. Не могли бы вы помочь, как мне этого добиться? Вот мой код:

enter image description here

1 Ответ

2 голосов
/ 18 марта 2020

Вы можете создать отдельный метод, который вы пометите как виртуальный, а затем вместо добавления обработчика событий в производную форму, просто вызовите виртуальный метод в исходной форме.

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 (), в противном случае вы вставляете свой код, чтобы сделать что-то еще.

Это избавляет вас от необходимости беспокоиться о подавлении событий щелчков, так как они существуют только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...