【问题标题】:Form designer breaks on generic abstract UserControl表单设计器在通用抽象 UserControl 上中断
【发布时间】:2012-09-14 18:11:19
【问题描述】:

我有一个通用抽象 UserControlSensorControl,我希望我的所有传感器控制面板都继承自该类。

问题

当尝试从 Visual Studio 中设计 EthernetSensorControl(我继承的 UserControl 表单之一,表单设计器中显示以下错误:

无法为该文件显示设计器,因为其中没有任何类可以设计。设计人员检查了文件中的以下类: 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(IDesignerSerializationManager 序列化管理器) 在 System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost 主机)

一切都编译了,我可以看到显示的面板,但我无法设计它。我认为问题可能与partial 类有关。有什么想法吗?

【问题讨论】:

  • 值得注意的是,正确的术语是 Generic 类(不是模板类)。尽管语法类似于 C++ 模板类,但它们的行为却大不相同。
  • 正式注明。我来自 C++。解决了我的问题。

标签: c# templates inheritance windows-forms-designer partial-classes


【解决方案1】:

您不能设计继承abstract 类的控件或表单。

(设计者需要实例化基类作为设计图面)

基类还需要有一个无参构造函数供设计者调用。
这个构造函数可以是私有的。

【讨论】:

  • 好的。那么,我应该在我的SensorControl 类中添加一个无参数构造函数并删除 abstract 关键字?
  • 删除了抽象,向SensorControlDeviceSensorControl 添加了(公共)无参数构造函数,但我仍然遇到同样的错误。
  • 或许与此有关?:stackoverflow.com/questions/677609/…
猜你喜欢
  • 2016-11-10
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-17
相关资源
最近更新 更多