[英]Using form.ShowDialog() after this.Dispose();
我正在从另一个表单启动一个表单。 我希望在显示子表单之前先处理父表单,所以我使用:
this.Dispose();
form.ShowDialog();
显示表格,这是正确的方法吗? 通过调用主窗体中的ShowDialog()
启动窗体from。 我希望在主表单可编辑之前关闭这些表单。
EDIT:
这是基本过程
的MainForm>(ShowDialog的)> Form1中>(处置+的ShowDialog)>窗口2(处置)>的MainForm
如果要确保父级在显示子级之前不可见,并且希望父级关闭:
var f = new ChildForm();
this.Hide();
f.Show();
this.Close();
ShowDialog()
意思是“显示此表单并在关闭后返回给我 ”。 那不是您想发生的事情。
根据您的评论,从主窗体创建并显示form2可能更有意义。
主要形式:
DialogResult form1Result;
using (var f = new Form1())
{
form1Result = f.ShowDialog();
}
if (form1Result == DialogResult.OK)
{
using (var f2 = new Form2())
{
f2.ShowDialog();
}
}
在最初生成Form2的Form1事件中
this.DialogResult = DialogResult.OK;
this.Close();
在任何对象(包括当前称为this
对象)上调用Dispose
表示您已经完成了该对象,并且最终完成了该对象。
最好Close
第一个对话框,然后显示第二个对话框。
如果以模态显示子对话框(在本例中是这种情况),则可以隐藏父对话框。您可以做的是隐藏父窗体,显示子窗体,然后关闭父窗体。
var form = new SomeForm();
this.Hide();
form.ShowDialog(); // the code will be blocked at this point until the child form closes
this.Close();
this.Dispose(); // i'm not sure if this is necessary anymore. check MSDN
如果显示的是表单(非模态),则可以隐藏父表单,并侦听子表单的close事件,然后在处理程序中关闭父表单。
void childFormClosed(Event e)
{
this.Close();
}
var form = new SomeForm();
form.Closed += new EventHandler... // I usually rely on intellisense with this
this.Hide();
form.ShowDialog();
抱歉,我认为您不能这样做,因为当您调用ShowDialog方法时,子窗体将依赖于其父窗体。 因此,处置请求将被暂停,直到您完成子表单为止。
我认为您必须调用“ Show”方法,然后才能调用dispose方法。
子窗体的生命周期取决于其父窗体的生命周期,这意味着,一旦调用父窗体的parent.close,它将处理该实例创建的所有对象。
您必须独立于父代创建子代。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.