Дизайнер форм разбивается на общий абстрактный UserControl - PullRequest
7 голосов
/ 14 октября 2010

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

Проблема

При попытке создать EthernetSensorControl (одна из моих унаследованных форм UserControl, из Visual Studio, в конструкторе форм отображается следующая ошибка:

Конструктор не может быть показан для этого файла, поскольку ни один из классов в нем не можетРазработчик проверил следующие классы в файле: DeviceSensorControl --- Не удалось загрузить базовый класс Engine.Sensors.SensorControl. Убедитесь, что на сборку ссылались и все проекты были построены.

SensorControl класс:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Engine.Sensors
{
    public abstract class SensorControl<SensorType>
        : UserControl where SensorType : class
    {
        protected SensorType _sensor;
        public SensorControl(SensorType sensor)
        {
            _sensor = sensor;
        }
    }
}

Пример унаследованного класса, EthernetSensorControl:

namespace Engine.Sensors
{
    public partial class EthernetSensorControl
        : SensorControl<EthernetSensor>
    {
        public EthernetSensorControl(EthernetSensor sensor)
            : base(sensor)
        {
        }
    }
}

И стек вызовов:

в System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.EnsureDocument (менеджер IDesignerSerializationManager) в System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad (Диспетчер IDesignerSerializationManager) в Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad (ID сериализации IDesignerSerializationManager) в System.ComponentModel.Design.Serialization * * * 12 *.Я могу видеть панель, но я не могу создать ее.Я думаю, что проблема может быть связана с partial классами.Есть идеи?

1 Ответ

9 голосов
/ 14 октября 2010

Нельзя создать элемент управления или форму, которая наследует класс abstract.

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

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

...