【发布时间】:2011-09-06 15:23:16
【问题描述】:
从类库中,我想知道它是否在设计模式而不是正常运行时被访问。
我尝试使用 System.ComponentModel.LicenseManager.UsageMode,但即使我正在编辑表单,它的值似乎也是 Runtime。
更新: 澄清一下,我想知道我是否处于设计模式不是来自组件,而是来自一个单独的类,该类碰巧被表单或控件中的其他项目调用。我有一个实用程序类,它是从控件间接调用的,我需要知道我是否处于设计模式。
【问题讨论】:
从类库中,我想知道它是否在设计模式而不是正常运行时被访问。
我尝试使用 System.ComponentModel.LicenseManager.UsageMode,但即使我正在编辑表单,它的值似乎也是 Runtime。
更新: 澄清一下,我想知道我是否处于设计模式不是来自组件,而是来自一个单独的类,该类碰巧被表单或控件中的其他项目调用。我有一个实用程序类,它是从控件间接调用的,我需要知道我是否处于设计模式。
【问题讨论】:
我认为 Component.DesignMode 在这种情况下不会有帮助。如果表单设计器上没有加载组件或控件怎么办?在这种情况下您可以尝试的是,创建一个仅在正常启动时设置一个值的枚举,否则默认情况下会保留为另一个值。您现在可以检查枚举实例的值并确定它是设计时还是运行时。
【讨论】:
您可以使用Component.DesignMode 进行检查。但是请注意,这总是会在组件的构造函数中报告false,因此需要稍后检查。详情请见Debugging Design-Time Controls。
响应 cmets 编辑并编辑:
不幸的是,LicenseMananger 以及大多数其他提供有关您是否处于设计时间的信息的服务(包括Component.DesignMode 和DesignerProperties.IsInDesignMode)专门用于处理用户界面元素。这是有道理的,因为它们旨在告诉您何时在设计器表面上“设计”您的项目,这需要在设计器中注册组件。
没有一个单一的属性可以从任意类中清楚地告诉您这一点。
我可以看到两个选项,都不太理想:
Component 或DependencyObject),因此上述方法可用于正确检查设计时访问。这可能是一种更易于维护的方法,并且可能会在更多情况下正常工作。【讨论】:
难道不能使用 Component.DesignMode 属性吗?
【讨论】:
这里有一些关于应用属性以获得设计时特定行为的信息:http://msdn.microsoft.com/en-us/library/37899azc.aspx
【讨论】: