2009-02-18 66 views
4

我應該在構造函數還是FormLoad()中加載子窗體?要加載()或不加載表單加載()

我有一些代碼調用一個自定義類,它將一個窗體嵌入到控件中。我原本一直宣稱的構造超出了我的子窗體,然後調用在FormLoad()一FormPaint()例程然後加載形式,像這樣:

internal frmWWCMCPHost frmWWCMCPHost = new frmWWCMCPHost(); 
internal frmWWCEnrollmentHost frmWWCEnrollmentHost = new frmWWCEnrollmentHost(); 
internal frmWWCMemberHost frmWWCMemberHost = new frmWWCMemberHost(); 

public frmWWCModuleHost() 
{ 
    InitializeComponent();   
} 

private void frmWWCModuleHost_Load(object sender, EventArgs e) 
{ 
    FormPaint(); 
} 

public void FormPaint() 
{ 
    WinFormCustomHandling.ShowFormInControl(frmWWCMCPHost, ref tpgMCP, FormBorderStyle.FixedToolWindow,-4,-2); 
    WinFormCustomHandling.ShowFormInControl(frmWWCMemberHost, ref tpgMember, FormBorderStyle.FixedToolWindow, -4, -2); 
    WinFormCustomHandling.ShowFormInControl(frmWWCEnrollmentHost, ref tpgEnrollment, FormBorderStyle.FixedToolWindow, -4, -2); 

    // Call each top-Level (visible) tabpage's form FormPaint() 
    frmWWCMCPHost.FormPaint(); 
} 

現在我已經證明嵌入一個更好的方法容器控件中的表單,因爲它涉及我的自定義類,here

我的問題是我應該在哪裏被加載這些作爲例子他們被裝載在構造的同時,宣佈他們,就像這樣:

public frmWWCModuleHost() 
{ 
    InitializeComponent(); 
    WinFormCustomHandling.ShowFormInContainerControl(tpgCaseNotes, new XfrmTest()); 
} 

這是很明顯,更少的代碼。通過在構造函數中加載,我將使用更多不必要的資源?我會獲得什麼?我如何決定?

+0

+1僅用於創意標題。 – 2009-02-18 20:59:09

回答

2

有趣的問題Mr_Mom。我的建議是使用你的構造函數只做子表單所需的設置,並推遲加載子表單直到父表單加載()。

至於資源,收益和損失......我不知道。

2

減少外部複雜性會增加可讀性並應該減少可能的錯誤。

+0

您能詳細說明它與我的問題有關嗎?我不確定你建議我把它放在構造函數或FormLoad()中是什麼意思? – 2009-02-18 19:25:24

+0

在構造函數中,因爲它們是表單的一部分。在表單加載中設置變量選項。 – sfossen 2009-02-18 21:10:26

2

在切線上,永遠不會使用throw ex重新拋出異常;它會重置調用堆棧。只需使用throw;

4

我更喜歡使用窗體的構造函數。我的意思是設置一切之前表格將顯示,而不是之後。