VS.NET 2003コントロールライブラリプロジェクトで設計時間を検出する方法
-
02-07-2019 - |
質問
以下のコードは、デザインモード(VS.Net 2003-コントロールライブラリ)であるかどうかを検出するために期待どおりに機能しません:
if(this.Site!= null&& this.Site.DesignMode == true)
{
//デザインモード
}
else
{
//実行時
}
これは、別のユーザーコントロールから派生し、その上に他のユーザーコントロールを含む、複雑なユーザーコントロールで使用されます。
VS.NET 2003で設計時間を検出する別の方法はありますか、上記のコードの問題は何ですか?
解決
DesignMode
は、コンストラクター内では機能しません。いくつかの選択肢(1.1で動作するかどうかはわかりません)は
if(System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Designtime)
または
GetService(typeof(IDesignerHost))
を呼び出して、何かを返すかどうかを確認します。
最初のオプションの方が幸運でした。
他のヒント
http:/で説明されているように、HttpContext.Current == nullを使用できると思います。 /west-wind.com/weblog/posts/189.aspx
.Net 2.0にはControl.DesignMode( http://msdn.microsoft.com/en-us/library/system.web.ui.control.designmode.aspx )。ただし、VS 2003を使用する正当な理由があるので、アップグレードは選択肢ではないかもしれません。
更新 Winformsを実行している場合、Component.DesignMode( http://msdn.microsoft.com/en-us/library/system.componentmodel.component.designmode.aspx )がチェックする正しい方法です。ただし、this.Site.DesignModeが適切に機能しない場合、Component.DesignModeも機能しない可能性があります。これは、実行しているチェックとまったく同じであるためです(Site!= null&& Site.DesignMode)。
これは長いショットかもしれませんが、ベースコントロールがサイトプロパティをオーバーライドしないことを確認しますか?