VisualStudioのデザインモードを判定する方法として、DesignModeプロパティがあるが、
継承コントロールやユーザコントロールの場合、正しく値が取得できない。
EndInit後に全ての親コントロールのDesignModeを確認することで、
デザインモードの判定を行う。
internal class uctlControl : PictureBox, ISupportInitialize // ISupportInitializeを継承し、EndInitイベントを受信する
{
/// <summary>
/// Init後処理
/// </summary>
public void EndInit()
{
// 自身のデザインモードを取得
bool bolDesignMode = base.DesignMode;
// 親コントロールを再帰取得
Control objParent = this.Parent;
while (objParent != null)
{
ISite objSite = objParent.Site;
if (objSite != null)
bolDesignMode |= objSite.DesignMode;
objParent = objParent.Parent;
}
// デザインモードの場合は処理を抜ける
if (bolDesignMode == true)
return;
// デザインモードではないときに行う初期化処理
}
}