フォームとUserControlのDesignModeプロパティに関する複数の投稿と質問があります。コントロールがデザインモード(コントロールがVisual Studio Designerに表示されているなど)にあるかどうかを確認し、実行時にのみ実行できるコードは避けてください。 多くの人が見てきた問題は、DesignModeプロパティがコンストラクタで機能せず、入れ子になったコントロールでは機能しないということです。 しかし、これはあなたのコントロールやフォームのLoadイベントハンドラで非常にうまく動作します!!DesignModeプロパティとLicenseManager.UsageModeの使用
フォームまたはユーザーコントロールのコンストラクタのコードは、フォームを読み込む必要のない状態のみを処理する必要があります。 UIオブジェクトの初期化を扱うコードは、コントロールのLoadイベントハンドラに配置する必要があります。その関数では、DesignModeプロパティが機能します。設計者はその時点で適切な値を使用します。
原則として、InitializeComponent()メソッドが呼び出されましたが、実際にはコントロールをデザインビューで表示すると、Designerはその関数を解析し、実行しません。ただし、デザイナはネストされたコントロールのコンストラクタを実行します。 初期化コードをコンストラクタに配置する必要がある場合は、System.ComponentModel.LicenseManagerクラスを使用します。これには、DesignTimeまたはRunTimeの値をとるUsageModeという静的プロパティがあります。あなたはコントロールのコンストラクタでそのプロパティを絶対に信じることができますが、コンストラクタでのみ!
私は現時点で取り組んでいるアプリでは少し微妙なことを忘れていました。この問題を回避するために、私は、余分な初期化を必要とするすべてのコントロールとフォームでLoadイベントのハンドラを実装する必要があるというパターンを守っています。そこで、DesignModeプロパティはうまく動作し、デザイナでユーザーコントロールとフォームを開くのに問題はありません。
私はクラス階層を持っていると、そのイベントハンドラを仮想的に保護することがあります。サブクラスで余分な初期化が必要な場合にのみ、それをオーバーライドします。
I午前思って、しかし、そこにそこに、より良い方法をされている場合、または(何回もLoadイベントハンドラを実装したことを他の?)
非常に参考になりました。ありがとうございます。 –