7

すべてのセンサー コントロール パネルに継承させたい汎用抽象UserControlクラス があります。SensorControl

問題

EthernetSensorControl(継承した UserControl フォームの 1 つを 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 (IDesignerSerializationManager serializationManager) System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad (IDesignerLoaderHost ホスト) で

すべてがコンパイルされ、表示されたパネルを見ることができますが、デザインすることはできません。partial問題はクラスに関連している可能性があると思います。何か案は?

4

1 に答える 1

9

abstractクラスを継承するコントロールまたはフォームを設計することはできません。

(デザイナーは、デザイン サーフェイスとして機能する基本クラスをインスタンス化する必要があります)

基本クラスには、デザイナーが呼び出すためのパラメーターなしのコンストラクターも必要です。
このコンストラクターはプライベートにすることができます。

于 2010-10-14T12:49:11.370 に答える