c#隐藏Designer中的功能

时间:2009-08-25 17:39:26

标签: c# designer attributes

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

更多细节: 我的意思是视觉工作室设计师的胜利形式。我的表单使用的是一个在初始化时调用LoadProject()的符号。现在我想避免设计者调用LoadProject()函数。

3 个答案:

答案 0 :(得分:2)

假设这是WinForms - 您可以检查您当前是否在DesignMode中,并且只是让您的函数立即返回。

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

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

在任何这些检查中包含对您的功能的调用都可以解决您的问题。