C# 知道何时处于设计模式

C# 知道何时处于设计模式,c#,.net,winforms,C#,.net,Winforms,在类库中,我想知道它是否在设计模式下被访问,而不是在正常运行时 我尝试使用System.ComponentModel.LicenseManager.UsageMode,但它似乎有一个Runtime值,即使在编辑表单时也是如此 更新: 为了澄清这一点,我想知道我是否处于设计模式,而不是在组件中,而是在一个单独的类中,该类恰好由表单或控件中的其他项调用。我有一个从控件间接调用的实用程序类,我需要知道我是否处于设计模式。您可以使用它来检查这一点。但是,请注意,这将始终在组件的构造函数中报告false,

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

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

更新: 为了澄清这一点,我想知道我是否处于设计模式,而不是在组件中,而是在一个单独的类中,该类恰好由表单或控件中的其他项调用。我有一个从控件间接调用的实用程序类,我需要知道我是否处于设计模式。

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


根据评论进行编辑并编辑:

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

在任意类中,没有一个属性可以清楚地告诉您这一点

我可以看到两种选择,但都不太理想:

  • 将所需信息传递到类中(即
    组件
    依赖对象
    ),以便使用上述方法正确检查设计时访问。这可能是一种更易于维护的方法,并且可能在更多情况下正常工作
  • 求助于检查并查找“devenv”的“hack”—这相当糟糕,因为它假设仅限于Visual Studio,依赖于可执行文件名,等等。。。一般来说,我会提到它,因为您可以通过足够的搜索找到它,但不会推荐它,因为它很容易规避,并且有许多限制和缺陷

  • 无法使用Component.DesignMode属性吗?

    以下是有关应用属性以获得设计时特定行为的一些信息:

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

    否--不是从单独的类库中。否。我需要从一个单独的类库中的实用程序类中了解。我认为这样做是最好的。虽然枚举不是必需的。一个可以从应用程序的其他部分访问的简单bool就足够了。isRuntMemode可以在应用程序正常启动时设置为true。是的,我同意。一个简单的傻瓜就可以愉快地完成这项工作。我只是有点过度设计了解决方案。谢谢你带我回来。看@