3

以下のコードは、デザイン モード (VS.Net 2003 - コントロール ライブラリ) であるかどうかを検出するために期待どおりに機能しません。

if (this.Site != null && this.Site.DesignMode == true)
{
// デザイン モード
}
else
{
// ランタイム
}

複雑なユーザー コントロールで使用され、別のユーザー コントロールから派生し、他のユーザー コントロールが含まれます。
VS.NET 2003 で設計時間を検出する別の方法はありますか、または上記のコードの問題は何ですか?

4

2 に答える 2

6

DesignModeコンストラクター内からは機能しません。いくつかの選択肢(1.1で機能するかどうかはわかりません)は次のとおりです。

if (System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Designtime)

また

呼び出しGetService(typeof(IDesignerHost))て、何かが返されるかどうかを確認します。

私は最初のオプションで運が良かった。

于 2008-11-18T06:19:23.190 に答える
0

http://west-wind.com/weblog/posts/189.aspxで説明されているように、 HttpContext.Current == null を使用できると思います

.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)。

これは一筋縄ではいかないかもしれませんが、基本コントロールが Site プロパティをオーバーライドしていないことを確認してください。

于 2008-09-28T01:50:13.537 に答える