2009-02-18 65 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

我更喜欢使用窗体的构造函数。我的意思是设置一切之前表格将显示,而不是之后。