4

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

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

4

3 回答 3

2

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

本文全面解释了一些复杂性,包括解决方案。

于 2009-08-25T17:46:01.370 回答
1

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

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

于 2009-08-25T17:47:55.283 回答
1

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

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

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

于 2009-08-25T18:24:22.667 回答