Эффективно "Переопределить" Control.Enabled - PullRequest
4 голосов
/ 28 октября 2011

Я немного осмотрелся и не могу найти ответ о том, как эффективно «переопределить» Control.Enabled в C # WinForms 3.5.

Наша ситуация такова, что у нас есть базовая форма или мастер-форма, которую мы используем, которая добавляет строку состояния внизу и панель инструментов вверху.Эта форма наследуется всеми другими нашими формами, которые затем добавляют элементы управления на центральную панель.

В некоторых формах, которые наследуются от основной базовой формы, мы хотим иметь возможность использовать свойство «Enabled»в форме, но мы хотим иметь возможность переопределить функциональность, чтобы она отключала только центральную панель, а не строку состояния / меню, и поэтому она все еще могла перемещать форму.

Я попытался сделать следующее в главной форме (FrmBaseStatus):

private bool enabled = true;
public new bool Enabled
{
    return this.enabled;
}
set
{
    this.enabled = value;
    this.panelBase.Enabled = value;
}

Однако, очевидно, это не истинное переопределение, и если у нас есть пользовательский элемент управления на базовой панели водна из наших унаследованных форм, и мы хотим переопределить форму из этого пользовательского элемента управления, мы должны сделать что-то вроде:

((FrmBaseStatus)this.ParentForm).Enabled = true;

Есть ли другой способ сделать это, или мы застряли с всегда приведением к нашей базеформа для того, чтобы получить свойство Enabled, которое мы хотим использовать .?

Примечание: будет ли это переопределять событие OnEnabled и не вызывать базовый OnEnabled, или это включение или отключение не выполняется в этом событии Control.OnEnabled()

1 Ответ

4 голосов
/ 28 октября 2011

Свойство Enabled в элементе управления используется для включения / отключения всего элемента управления, поэтому я не совсем понимаю, почему вам нужно переопределить свойство Enabled в родительской форме. Если вам нужно точно отключить centerPanel, добавьте свойство, чтобы получить эту панель, и отключите его.

Я бы рекомендовал определить свойство CenterPanel в базовой форме, а затем использовать его для отключения этой панели:

// code defined in your FrmBaseStatus form
protected Control CenterPanel
{
    get
    {
        return this.panelBase;
    }
}

Тогда из ваших унаследованных форм вы можете использовать:

// disable center panel and its childs
this.CenterPanel.Enabled = false;

//disable the whole form
this.Enabled = false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...