web-dev-qa-db-ja.com

基本クラスを継承するときのエラー「タイプ 'MyType'のコンストラクターが見つかりません」を回避する方法

他のクラスが継承するForm基本クラスを含むVisual Studio 2010 Windows Formsアプリがあります。基本クラスのコンストラクターは、子クラスが基本クラスに渡すパラメーターを受け取ります。

例:

public partial class BaseForm : Form
{
    public BaseForm(int number)
    {
        InitializeComponent();
    }
}

public partial class ChildForm : BaseForm
{
    public ChildForm(int number)
        : base(number)
    {
        InitializeComponent();
    }
}

私が実行している問題は、VisualStudioのデザインビューモードでChildFormを開こうとすると、次のエラーを受け取ることです。

タイプ「MyProject.BaseForm」のコンストラクタが見つかりません。

注:エラーに関係なく、プロジェクトは正常にコンパイルおよび実行されます。

パラメータを含まないコンストラクタでコンストラクタをオーバーロードすると、エラーを回避できます。

例:(これはエラーを取り除きます)

public partial class BaseForm : Form
{
    public BaseForm(int number)
    {
        InitializeComponent();
    }

    public BaseForm()
    {
        InitializeComponent();
    }
}

public partial class ChildForm : BaseForm
{
    public ChildForm(int number)
        : base(number)
    {
        InitializeComponent();
    }
}

私の質問は、パラメーターのないコンストラクターを含まない基本クラスを作成して、デザインビューエラーを回避するにはどうすればよいですか?

25
Jed

それは完全に不可能です。

デザインビューに表示されるフォームは、基本クラスの実際のインスタンスです。
デフォルトのコンストラクタがない場合、デザイナーはそのインスタンスを作成できません。

コンストラクターを[Obsolete("Designer only", true)]でマークし、デザイナー以外で呼び出された場合に例外をスローして、他の人が呼び出さないようにすることができます。

31
SLaks

BaseForm出力タイプを調整する必要があります。プロジェクトのプロパティで、出力タイプをWindowsアプリケーションからクラスライブラリに変更します。

ref: https://docs.Microsoft.com/zh-tw/dotnet/framework/winforms/advanced/walkthrough-demonstrating-visual-inheritance

0
psyduck