如何检测VS.NET 2003控件库项目中的设计时间

时间:2008-09-28 00:53:02

标签: visual-studio-2003 design-time

以下代码无法正常工作以检测它是否处于设计模式(VS.Net 2003 - 控制库):

if(this.Site!= null&& this.Site.DesignMode == true)
{
  //设计模式
}
否则
{
  //运行时
}

它用于复杂的用户控件,从另一个用户控件派生,并包含其他用户控件 是否有另一种方法来检测VS.NET 2003中的设计时间或上面的代码有什么问题?

2 个答案:

答案 0 :(得分:6)

DesignMode无法在构造函数内部工作。一些替代方案(不确定它们是否在1.1中工作)是

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

调用GetService(typeof(IDesignerHost))并查看是否返回了某些内容。

我对第一个选项运气好了。

答案 1 :(得分:0)

我猜您可以使用HttpContext.Current == null,如http://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)是正确的检查方式。但是,如果此.Site.DesignMode无法正常工作,Component.DesignMode可能无法正常工作,因为它完全与您正在进行的检查完成(Site!= null&& Site.DesignMode)。

这可能是一个很长的镜头,但您确定您的基本控件不会覆盖Site属性吗?