我正在从另一种形式发布表单。我希望在显示子表单之前处理父表单,所以我使用:
this.Dispose();
form.ShowDialog();
显示表单,这是正确的方法吗?表单来自主表单的ShowDialog()
调用。我希望在主表单可编辑之前关闭这些表单。
EDIT:
这是基本流程
的MainForm>(ShowDialog的)GT; form1中>(处置+的ShowDialog)GT;窗口2(处置)GT;的MainForm
答案 0 :(得分:3)
如果您想确保在显示子项之前看不到父项,并且您希望父项关闭:
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();
}
}
在Form1事件中,您最初生成Form2
this.DialogResult = DialogResult.OK;
this.Close();
答案 1 :(得分:2)
在任何对象(包括当前对象称为Dispose
)上调用this
表示您已完成该对象,它已在最终完成。
最好Close
第一个对话,然后显示第二个对话。
答案 2 :(得分:1)
如果您以模态方式显示子对话框(在这种情况下是您),则可以隐藏父对话框您可以做的是隐藏父窗体,显示子窗体,然后关闭父窗体。
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();
答案 3 :(得分:0)
我认为你必须调用“Show”方法,之后你可以调用dispose方法。
答案 4 :(得分:0)
子表单的生命周期取决于其父生命周期,也就是说,一旦调用父表单的parent.close,它将处理该实例创建的所有对象。
您必须独立于父级创建子项。