【问题标题】:Knowing when in design mode知道何时处于设计模式
【发布时间】:2011-09-06 15:23:16
【问题描述】:

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

我尝试使用 System.ComponentModel.LicenseManager.UsageMode,但即使我正在编辑表单,它的值似乎也是 Runtime。

更新: 澄清一下,我想知道我是否处于设计模式不是来自组件,而是来自一个单独的类,该类碰巧被表单或控件中的其他项目调用。我有一个实用程序类,它是从控件间接调用的,我需要知道我是否处于设计模式。

【问题讨论】:

标签: c# .net winforms


【解决方案1】:

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

【讨论】:

  • 我认为这些方面的东西是最好的。虽然枚举不是必需的。可以从应用程序的其他部分访问的简单布尔值就足够了。 IsRuntimeMode 可以在应用正常启动时设置为 true。
  • 是的,我同意。一个简单的 bool 就可以愉快地完成这项工作。我只是有点过度设计了解决方案。谢谢你带我回来。
【解决方案2】:

您可以使用Component.DesignMode 进行检查。但是请注意,这总是会在组件的构造函数中报告false,因此需要稍后检查。详情请见Debugging Design-Time Controls


响应 cmets 编辑并编辑:

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

没有一个单一的属性可以从任意类中清楚地告诉您这一点。

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

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

【讨论】:

  • 不。我需要从单独的类库中的实用程序类中知道。
【解决方案3】:

难道不能使用 Component.DesignMode 属性吗?

【讨论】:

  • 否——不是来自单独的类库。
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-11
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    相关资源
    最近更新 更多