形成Load()或不形成Load()

时间:2009-02-18 17:37:56

标签: c# .net winforms constructor form-load

我应该在构造函数或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());
}

显然,代码要少得多。通过在构造函数中加载,我将使用更多不必要的资源吗?我会获得什么吗?我该如何决定?

4 个答案:

答案 0 :(得分:4)

我更喜欢使用form的构造函数。我的意思是设置之前的所有内容将显示一个表单,而不是之后。

答案 1 :(得分:2)

降低向外复杂性将提高可读性并减少可能的错误。

答案 2 :(得分:2)

在切线上,永远不要使用throw ex重新抛出异常;它会重置调用堆栈。只需使用throw;

答案 3 :(得分:2)

有趣的问题Mr_Mom。我的建议是使用你的构造函数只做子表单所需的设置,并推迟加载子表单直到父formLoad()。

至于资源,收益和损失......我不知道。