C#,ソフトウェア開発

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;

            // デザインモードではないときに行う初期化処理
        }
}