2009-01-26 23 views
3

在WinForm設計器中加載UserControl時,VisualStudio會執行該控件的InitializeComponent()方法,但不執行其構造函數。 這真的有所作爲,因爲在構造函數中有一些無法在設計時運行的代碼是很常見的。如何在使用.net Winform設計器時處理UserControls構造函數中的異常?

不幸的是,當您將UserControl添加到另一個控件時,VisualStudio會運行父控件的InitializeComponent()方法,該方法調用子控件的構造函數,如果在這些構造函數中有異常,重新卡住。

你如何處理這個問題?

+0

如何將Visual Studio中調用InitialiseComponent沒有構造一個實例。構造函數保證在InitializeComponent之前被調用。 – 2009-01-26 16:17:33

+0

只需嘗試一下:創建一個空白表單,並在構造函數的第一行(即在調用Initializecomponent之前)添加「拋出新的Exception()」。您會看到Winform設計器仍然可以加載表單。 – Brann 2009-01-26 16:26:34

回答

0

我使用的解決方法是將我的運行時初始化代碼放入InitializeRuntime()方法,該方法是從頂級構造函數遞歸調用的。 這解決了這個問題,但我總是要記住爲每個添加的UserControl添加對InitializeRuntime()的調用,而不是使用設計器拖動組件。

2

包住運行時只有部分:

If Not me.DesignMode Then 
    'Runtime only here 
End If 
0

爲什麼不能在這種情況下使用OnLoadEvent?

1

我發現a solution in CodeProject爲我的作品:

if (System.ComponentModel.LicenseManager.UsageMode != 
    System.ComponentModel.LicenseUsageMode.Designtime) 
{ 
    // Runtime only here 
} 
相關問題