如何在VS.NET 2003控件库项目中检测设计时间
下面的代码无法正常运行以检测其是否处于设计模式(VS.Net 2003控制库):
如果(this.Site!= null && this.Site.DesignMode == true)
{
//设计模式
}
别的
{
// 运行
}
它用于复杂的用户控件中,该控件派生自另一个用户控件,并包括其他用户控件。
还有另一种方法可以检测VS.NET 2003中的设计时间,或者上面的代码有什么问题?
解决方案
我猜我们可以使用HttpContext.Current == null,如http://west-wind.com/weblog/posts/189.aspx中所述
在.Net 2.0中,存在Control.DesignMode(http://msdn.microsoft.com/zh-cn/library/system.web.ui.control.designmode.aspx)。我想我们有充分的理由继续使用VS 2003,因此升级可能不是选择。
更新如果我们正在执行Winforms,则Component.DesignMode(http://msdn.microsoft.com/zh-cn/library/system.componentmodel.component.designmode.aspx)是检查的正确方法。但是,如果this.Site.DesignMode无法正常运行,则Component.DesignMode可能无法正常运行,因为它恰好执行了我们正在执行的检查(Site!= null && Site.DesignMode)。
这可能会花费很长时间,但是我们确定基本控件不会覆盖Site属性吗?
" DesignMode"将无法在构造函数内部运行。一些替代方法(不确定它们是否适用于1.1)是
如果(System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Designtime)
或者
调用GetService(typeof(IDesignerHost))
,看看它是否返回一些东西。
第一种选择我比较幸运。