【问题标题】:To Form Load() or Not to Form Load()形成 Load() 或不形成 Load()
【发布时间】:2010-10-08 09:45:08
【问题描述】:

我应该在 Constructor 还是 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());
}

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      至于资源、得失……我不知道。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 您能否详细说明与我的问题有关的内容?我不确定您建议我将其放在构造函数或 FormLoad() 中做什么?
        • 在构造函数中,因为它们是表单的一部分。在表单加载中设置变量选项。
        • 所以在构造函数中创建表单,但在 formLoad() 中对它们执行任何其他操作。谢谢
        • 是的,因为它们是表单的组成部分,如果它们是可选的,我会将它们放入 formLoad()
        【解决方案4】:

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

        【讨论】:

        • 谢谢!那我应该把它当作扔掉吗?
        • 你真的不应该捕获(异常)并重新抛出,永远,要么;这是没有意义的。
        • 所以我什至不应该使用 try,catch here?
        • 没有。只捕获你要处理的异常。
        • 当像上面那样做时,VS告诉我“变量'ex'已声明但从未使用过......”这是正常的还是新的SO线程?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-17
        相关资源
        最近更新 更多