我需要首先加载主窗体,然后将第二个窗体加载为对话框。当我尝试以下,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();
}
}
答案 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
表单只会显示一次:
仅在第一次显示表单时引发显示事件;随后最小化,最大化,恢复,隐藏,显示或失效和重新绘制将不会引发此事件。