知道何时处于设计模式

从类库中,我想知道它是否在设计模式下被访问而不是正常的运行时。

我尝试使用System.ComponentModel.LicenseManager.UsageMode,但即使我在编辑表单时它似乎也有一个Runtime值。

更新:为了澄清,我想知道我是否处于设计模式,而不是来自组件内,而是来自一个单独的类,恰好被表单或控件中的其他项调用。 我有一个Utility类,它是从一个控件间接调用的,我需要知道我是否处于设计模式。

在这种情况下,我不认为Component.DesignMode会有所帮助。 如果表单设计器上没有加载组件或控件,该怎么办? 在这种情况下你可以尝试的是,创建一个枚举,它只在正常启动时设置一个值,否则默认保持为另一个值。 您现在可以检查枚举实例的值,并确定它是设计时还是运行时。

您可以使用Component.DesignMode来检查这一点。 但是,请注意,这将始终在组件的构造函数内报告false ,因此需要稍后进行检查。 有关详细信息,请参阅调试设计时控件 。


编辑以回复评论和编辑:

不幸的是, LicenseMananger以及提供有关您是否处于设计时(包括Component.DesignMode和DesignerProperties.IsInDesignMode )的信息的大多数其他服务都专门用于处理用户界面元素。 这是有道理的,因为它们旨在告诉您何时在设计器表面上“设计”您的项目,这需要在设计器中注册该组件。

没有任何一个属性会在任意类中干净地告诉你这一点。

我可以看到两个选项,两个都不太理想:

  1. 将所需信息传递到您的类(即: ComponentDependencyObject ),因此上述方法可用于正确检查设计时访问。 这可能是一种更易于维护的方法,并且可能在更多情况下正常工作。
  2. 求助于检查当前进程名称并寻找“devenv”的“hack” – 这非常糟糕,因为它只假定Visual Studio,依赖于可执行文件名等等…一般来说,我会提到它,因为你会发现它有足够的搜索,但不会推荐它,因为它很容易规避,并有许多限制和缺陷。

是否无法使用Component.DesignMode属性?

以下是有关应用属性以获取特定于设计时的行为的一些信息: http : //msdn.microsoft.com/en-us/library/37899azc.aspx