他のクラスが継承する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();
}
}
私の質問は、パラメーターのないコンストラクターを含まない基本クラスを作成して、デザインビューエラーを回避するにはどうすればよいですか?
それは完全に不可能です。
デザインビューに表示されるフォームは、基本クラスの実際のインスタンスです。
デフォルトのコンストラクタがない場合、デザイナーはそのインスタンスを作成できません。
コンストラクターを[Obsolete("Designer only", true)]
でマークし、デザイナー以外で呼び出された場合に例外をスローして、他の人が呼び出さないようにすることができます。
BaseForm出力タイプを調整する必要があります。プロジェクトのプロパティで、出力タイプをWindowsアプリケーションからクラスライブラリに変更します。