VS.NET 2003コントロールライブラリプロジェクトで設計時間を検出する方法

StackOverflow https://stackoverflow.com/questions/144898

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

これは長いショットかもしれませんが、ベースコントロールがサイトプロパティをオーバーライドしないことを確認しますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top