継承元フォームで Load イベントや、表示に係るイベント(Shown, Resize 等)を実装している場合、本来は実行時に発生するイベントが、継承先フォームをデザイナで開く時にも発生します。これは継承したコントロール(カスタムコントロール)でも同様です。
イベント内で this.DesignMode を利用して回避します。
private void Form1_Load(object sender, EventArgs e)
{
if (this.DesignMode) return;
//なんらかの処理
}
private void Form1_Resize(object sender, EventArgs e)
{
if (this.DesignMode) return;
//なんらかの処理
}
カスタムコントロールを作成した時も同じ症状に遭遇したのですが…忘れてました。へっぽこですね。これとは別に、継承元フォームにパラメータ付きコンストラクタのみを定義し、デフォルトコンストラクタを削除してしまっている場合や、デフォルトコンストラクタから InitializeComponent() を削除してしまっている場合も『コンストラクタが見つかりません』と警告になり表示されません。
public Form1()
{
// デフォルトコンストラクタ
// デフォルトコンストラクタに存在しないとデザイナで警告になる
InitializeComponent();
}
public Form1(int para1) : this ()
{
// パラメータ付きコンストラクタ
// ここに InitializeComponent() を記述し
// デフォルトコンストラクタに記述しない場合
// 実行は可能だがデザイナでは警告になる
// デフォルトコンストラクタに記述し this () で呼ぶか
// this () を使わず双方のコンストラクタに記述する事でも回避可能
// 何らかの処理
}
■環境
OS:Microsoft Windows XP Home Edition 日本語 Service Pack 3
IDE:Microsoft Visual Studio 2005 Standard Edition 日本語 Service Pack 1
Framework:Microsoft .NET Framework Version 2.0 SP2