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

Posted

技术标签:

【中文标题】如何检测 VS.NET 2003 控件库项目中的设计时间【英文标题】:How to detect design time in a VS.NET 2003 control library project 【发布时间】:2008-09-28 00:53:02 【问题描述】:

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

如果 (this.Site != null && this.Site.DesignMode == true) // 设计模式 其他 // 运行时

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

【问题讨论】:

这是在构造函数还是事件中? 它在负载处理程序事件中。 【参考方案1】:

DesignMode 不能在构造函数内部工作。一些替代品(不确定它们是否适用于 1.1)是

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

调用GetService(typeof(IDesignerHost)) 看看它是否返回了一些东西。

第一个选项我的运气更好。

【讨论】:

如果 (System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Designtime) 工作。谢谢..【参考方案2】:

我猜你可以使用 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 属性吗?

【讨论】:

对于 HttpContext;它是 winform 应用程序,而不是 web。留在VS 2003;不幸的是,目前这不是一个选择。 Component.DesignMode 支持:3.5、3.0、2.0。该软件在 Framwrork 1.1 上运行。感谢您的关注。 根据 Component.designMode 的 MSDN 页面,该属性从 1.0 开始就存在。

以上是关于如何检测 VS.NET 2003 控件库项目中的设计时间的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio .NET 2003 - 忽略 libcmt 与 libcmtd 的特定库

Windows 7 上的 mcms 2002

vs.net2003 安装时权限不够??

VS.net (c#)如何调用另一个控件的事件

如何检测是不是将项目添加到 ListBox(或 CheckedListBox)控件

VS.net中如何使用静态库