下面的代码无法按预期工作以检测它是否处于设计模式(VS.Net 2003 - 控制库):
if (this.Site != null && this.Site.DesignMode == true)
{
// 设计模式
}
else
{
// 运行时
}
它用于复杂的用户控件,派生自另一个用户控件并在其上包含其他用户控件。
是否有另一种方法来检测 VS.NET 2003 中的设计时间,或者上面的代码有什么问题?
下面的代码无法按预期工作以检测它是否处于设计模式(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://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 属性吗?