1

我需要首先加载主表单,然后将第二个表单作为对话框加载。当我尝试以下操作时,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();
    }
}
4

2 回答 2

3

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

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

调用主窗体时:

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

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

于 2013-07-25T00:45:40.377 回答
3

根据有关Windows 窗体中的事件顺序的 MSDN 文档,控件在事件之后才可见Load

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

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

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

于 2013-07-25T00:48:45.753 回答