第二个表单首先加载,并且在第一个表单关闭之前主表单不可见

时间:2013-07-25 00:43:11

标签: c# winforms visual-studio-2010

我需要首先加载主窗体,然后将第二个窗体加载为对话框。当我尝试以下,proFileDialog加载,mnuForm保持隐藏,直到我关闭proFileDialog我可以将它绑定到计时器,但为了学习c#,为什么它加载乱序,如何让它表现得恰当?

private void mnuForm_Load(object sender, EventArgs e)
{
    this.FormBorderStyle = FormBorderStyle.None;
    this.WindowState = FormWindowState.Maximized;

    using (Form proFileDialog = new Form())
    {
        proFileDialog.Text = "Some new form";
        proFileDialog.FormBorderStyle = FormBorderStyle.None;
        proFileDialog.Opacity = 100;
        proFileDialog.StartPosition = FormStartPosition.CenterScreen;

        // form.Controls.Add(...);
        proFileDialog.ShowDialog();
    }
}

2 个答案:

答案 0 :(得分:3)

根据MSDN,FormLoad事件发生在表单显示之前。由于您将第二个表单显示为对话框,因此它将在FormLoad事件完成之前停止在该行。 你可以做的是在主窗体中创建一个函数,该函数将被调用以显示模态对话框:

public void ShowProfileDialog()
{
    Form proFileDialog = new Form();
    profileDialog.ShowDialog()
}

致电主要表格时:

mnuForm mainform = new mnuForm();
mnuForm.Show();
mnuForm.ShowProfileDialog();

通过这种方式,主窗体已完全加载,因此您可以显示其他窗体。

答案 1 :(得分:3)

根据Order of Events in Windows Forms上的MSDN文档显示,在Load事件发生后,控件才会显示。

尝试订阅mnuForm上的Shown event并将代码放在那里。 这是mnuForm启动时运行的最后一个事件,mnuForm应该已经可见。

此外,您的profileDialog表单只会显示一次:

  

仅在第一次显示表单时引发显示事件;随后最小化,最大化,恢复,隐藏,显示或失效和重新绘制将不会引发此事件。