如何在构造函数中使用Visual Studio不会在设计时执行代码?

pol*_*lot 17 c# design-time visual-studio

我在我的用户控件的构造函数中有一个方法调用,它做了一些在设计时无法工作的东西(连接到数据库),当我尝试将该控件添加到GUI设计器时,Visual Studio就被挽救了.
当然,我可以将代码分解为一个单独的方法,但我不喜欢每次使用该对象时我都需要记住执行某个对象函数必不可少的方法的想法(这就是构造函数的作用)对于!).

是否有类似预处理器符号的东西,我可以标记我的代码,以便Visual Studio不会尝试在设计时执行该代码?

Mat*_*vis 27

正如其他人所说,你可以使用该类的DesignMode属性Component.但是,您将无法在控件的构造函数中执行此操作.该DesignMode属性始终false位于构造函数调用的构造函数和方法中.要解决此问题,请重新考虑代码以连接OnLoad()回调中的数据库.该DesignMode物业在此时有效.请参阅此处了解原因(查看本文的DesignMode部分).

我刚刚浏览了这个博客文章,描述了如何使用该System.ComponentModel.LicenseManager.UsageMode属性执行相同的操作.该博客描述了DesignMode处理嵌套控件时属性的另一个缺点.显然,该UsageMode属性没有相同的缺点,可以在构造函数中使用.我不能亲自担保,但可能值得研究.

  • 博客现在已经死了,但基本上它只是:`if(System.ComponentModel.LicenseManager.UsageMode == System.ComponentModel.LicenseUsageMode.Designtime) (9认同)

Mic*_*tta 14

在Windows窗体?

if (!DesignMode)
{
    // code that shouldn't be executed at design time
}
Run Code Online (Sandbox Code Playgroud)

正如其他人所提到的,这在构造函数中不起作用.它经常在Form.Load事件中使用.

  • 辉煌,恰好同时X-) (3认同)
  • 请小心!DesingMode属性有一些应该考虑的问题.你可以在这里找到一篇文章:http://weblogs.asp.net/fmarguerie/archive/2005/03/23/395658.aspx (2认同)