知道什么时候处于设计模式
本文关键字:设计模式 什么时候 | 更新日期: 2023-09-27 18:07:58
从类库中,我想知道它是否在设计模式期间被访问,而不是正常运行时。
我尝试使用System.ComponentModel.LicenseManager.UsageMode,但它似乎有运行时的值,即使我在编辑一个表单。
更新:澄清一下,我想知道我是否处于设计模式,而不是从组件中,而是从一个单独的类中,碰巧由窗体或控件中的其他项调用。我有一个从控件间接调用的实用程序类,在那里我需要知道我是否处于设计模式
我不认为组件。在这种情况下,DesignMode会有所帮助。如果组件或控件没有加载到表单设计器上,该怎么办?在这种情况下,你可以尝试的是,创建一个enum,它只在正常启动时设置一个值,否则默认情况下保持另一个值。现在您可以检查enum实例的值,并确定它是设计时的还是运行时的。
你可以使用Component。来检查这个。但是,请注意,这将始终在组件的构造函数中报告false
,因此需要稍后检查。详细信息请参见调试设计时控件。
对评论进行编辑并编辑:
不幸的是,LicenseMananger
,以及大多数其他提供关于你是否在设计时的信息的服务(包括Component.DesignMode
和DesignerProperties.IsInDesignMode)都是专门用于处理用户界面元素的。这是有道理的,因为它们的目的是告诉你什么时候你的项目是在一个设计器界面上"设计"的,这需要组件在设计器中注册。
没有一个单独的属性可以在任意的类中清楚地告诉你这些。
我可以看到两个选项,两个都不太理想:
- 将所需的信息传递到您的类中(即:
Component
或DependencyObject
),因此上面的方法可以用于正确检查设计时访问。这可能是一种更易于维护的方法,并且可能在更多情况下正常工作。 - 诉诸于检查当前进程名并查找"devenv"的"hack"——这是相当可怕的,因为它假设只有Visual Studio,依赖于可执行文件名等…一般来说,我会提到它,因为你会发现足够的搜索,但不推荐它,因为它很容易绕过,有许多限制和缺陷。
是否可以使用组件。DesignMode财产吗?
这里有一些关于应用属性以获得设计时特定行为的信息:http://msdn.microsoft.com/en-us/library/37899azc.aspx