UserControl внутри класса против класса внутри UserControl для Windows Forms - PullRequest
2 голосов
/ 12 октября 2010

Я работаю над модульным проектом, состоящим из нескольких датчиков, каждый из которых наследуется от абстрактного Sensor класса. Для настройки каждого датчика я начал добавлять пользовательскую панель управления для каждого датчика (наследуется от UserControl), которая загружается во время выполнения и отображается на панели вызывающим приложением.

Но затем я понял, что для изменения свойств датчика из элемента управления класс Control должен иметь доступ к этим свойствам или датчик должен подписаться на изменения настроек конфигурации в пользовательском элементе управления. Это не кажется правильным, однако, контроль должен контролировать датчик.

Какое самое элегантное решение для управления моими датчиками без создания адского делегата?

Должен ли я продолжить путь:

class TestSensor : Sensor
{
    public UserControl ControlPanel { get; } // returns a TestSensorControl
    // ...
}

или мои датчики должны быть созданы внутри моих элементов управления:

class TestSensorControl : UserControl
{
    private TestSensor _sensor;
    public TestSensor Sensor {
        get {
            return _sensor;
        }
    }

    // ...
}

Датчики отвечают за проверку изменений состояния и передачу их вызывающему приложению, сигнализируя событие OnSensorEvent(...).

Кроме того, мой базовый Sensor класс может наследоваться от UserControl, и мой SensorControl может наследовать от него, устраняя необходимость в промежуточном классе управления.

Ответы [ 2 ]

2 голосов
/ 12 октября 2010

Id передает датчик в управление и имеет процесс подписки.

1 голос
/ 12 октября 2010

Такое ощущение, что вы должны сохранить свой класс Sensor не-UI, который может использоваться контроллерами UI и Non-UI, и нет необходимости создавать базовый UserControl для каждой инициализации класса Sensor.предложить использовать унаследованные контроллеры (датчики создаются в контроллерах).Вы можете создать универсальный class SensorControl : UserControl пользовательский интерфейс и наследовать от этого класса class TestSensorControl : SensorControl.Это может сэкономить время и дублировать код.

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

Удачи

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