3

在 WinForm 设计器中加载 UserControl 时,VisualStudio 执行控件的 InitializeComponent() 方法,但不执行其构造函数。这真的很重要,因为在构造函数中有一些不能在设计时运行的代码是很常见的。

不幸的是,当您将 UserControl 添加到另一个控件时,VisualStudio 会运行​​父控件的 InitializeComponent() 方法,该方法调用子控件的构造函数,如果您在这些构造函数中遇到异常,那么您就会陷入困境。

你如何处理这个问题?

4

4 回答 4

2

仅将运行时部分包装为:

If Not me.DesignMode Then
  'Runtime only here
End If
于 2009-01-26T16:15:21.383 回答
1

在 CodeProject中找到了一个适合我的解决方案:

if (System.ComponentModel.LicenseManager.UsageMode != 
    System.ComponentModel.LicenseUsageMode.Designtime)
{
    // Runtime only here
}
于 2011-11-30T13:23:30.240 回答
0

我正在使用的解决方法是将我的运行时初始化代码放在 InitializeRuntime() 方法中,我从顶层构造函数递归调用该方法。这解决了问题,但我始终必须记住为我添加的每个 UserControl 添加对 InitializeRuntime() 的调用,而不是使用设计器拖放组件。

于 2009-01-26T16:04:39.580 回答
0

为什么不在这种情况下使用 OnLoadEvent 呢?

于 2009-01-26T16:15:57.357 回答