在WinForm设计器中加载UserControl时,VisualStudio将执行控件的InitializeComponent()方法,但不执行其构造函数。 这确实有所不同,因为在构造函数中有一些代码无法在设计时运行,这是很常见的。
不幸的是,当你将UserControl添加到另一个控件时,VisualStudio运行父控件的InitializeComponent()方法,该方法调用子控件的构造函数,如果你在这些构造函数中有异常,那么你就是stucked。
你如何处理这个问题?
答案 0 :(得分:2)
使用以下内容仅包含运行时部分:
If Not me.DesignMode Then
'Runtime only here
End If
答案 1 :(得分:1)
我发现a solution in CodeProject对我有用:
if (System.ComponentModel.LicenseManager.UsageMode !=
System.ComponentModel.LicenseUsageMode.Designtime)
{
// Runtime only here
}
答案 2 :(得分:0)
我正在使用的解决方法是将我的运行时初始化代码放在InitializeRuntime()方法中,我从顶层构造函数中递归调用。 这解决了这个问题,但我总是要记住为我添加的每个UserControl添加对InitializeRuntime()的调用,而不是仅仅使用设计器拖放组件。
答案 3 :(得分:0)
为什么不在这种情况下使用OnLoadEvent?