19

他のクラスが継承するForm基本クラスを含むVisual Studio 2010 Windows Formsアプリケーションがあります。基本クラスのコンストラクタは、子クラスが基本クラスに渡すパラメータを受け取ります。基本クラスを継承するときに「コンストラクターが型でMyTypeが見つかりません」

例:

Constructor on type 'MyProject.BaseForm' not found.

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

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

私はVisualStudioをのデザインビューモードでChildFormを開こうとしたとき、私はに実行している問題は、ですが、私は次のエラーを受け取ります注:エラーに関係なく、プロジェクトはコンパイルされ正常に実行されます。

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

例:(これはエラーを取り除く)

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

これはまったく不可能です。

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

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

+6

必要なパラメータのないインスタンスコンストラクタを 'private'にできますか? –

+2

@JeppeStigNielsen - はい。それが私のやり遂げたことであり、すべてがうまくいきます。 – Jed

+0

継承されたクラスと異なる場合、基本クラスがオンになっているプロジェクトを必ずコンパイルしてください。 –

関連する問題