【问题标题】:c# Hide function from Designerc#从设计器中隐藏函数
【发布时间】:2010-11-22 17:18:47
【问题描述】:

我有一个导致设计器异常的函数。如果设计师加载它,我可以避免调用该函数吗?有没有比try catch更好的属性或东西?

更多细节: 我的意思是win forms的视觉工作室设计师。我的表单正在使用一个signleton,它在初始化时调用LoadProject()。现在我想避免设计器调用 LoadProject() 函数。

【问题讨论】:

  • 哪个设计器 - Windows 窗体设计器?设计师调用的是哪个方法/函数?
  • 同意。如果您将问题改进得既详细又具体,我会给您一个 +1 来抵消。

标签: c# designer attributes


【解决方案1】:

假设这是 WinForms - 您可以检查您当前是否处于设计模式并立即让您的函数返回。

in this article 已充分解释了一些复杂性,包括解决方案。

【讨论】:

    【解决方案2】:

    您可以尝试查看 this article on the MSDN 关于使用 DesignMode 属性的信息。这可能会帮助你。您可以将在 this 中引发异常的代码包装在一个条件中,以避免在设计时使用该代码。

    请注意,这将在构造函数中不起作用,因为设计者必须实例化对象然后设置属性。

    【讨论】:

      【解决方案3】:

      有几种方法可以检测您是否处于设计模式:

      • 检查控件的DesignMode 属性的值。但是,这在控件的构造函数中不起作用,因为它仅在控件已被定位时才返回 true,这在创建控件之前不会发生。它还有一个bug,因此自定义控件中的自定义控件将始终返回 false
      • 使用Application.ExecutablePath.ToLower().IndexOf("devenv.exe")检查当前应用的路径是否包含devenv.exe。如果是,则 Visual Studio 正在实例化控件。有点可怕,但确实有效。
      • 检查LicenseManager.UsageMode 的值LicenseUsageMode.Designtime(查看my answerDetecting design mode from a Control’s constructor 了解更多详细信息)。请注意,这确实在构造函数中起作用

      在任何这些检查中包装对您的函数的调用应该可以解决您的问题。

      【讨论】:

        猜你喜欢
        • 2013-02-25
        • 1970-01-01
        • 2020-08-24
        • 2012-02-15
        • 1970-01-01
        • 1970-01-01
        • 2011-10-07
        • 2011-05-23
        • 2014-08-31
        相关资源
        最近更新 更多