我正在从另一个表单启动一个表单。我希望在显示子表单之前处理父表单,所以我使用:
this.Dispose();
form.ShowDialog();
显示表单,这是正确的方法吗?表单 from 是通过调用ShowDialog()
from 主表单启动的。我希望在主表单可编辑之前关闭这些表单。
EDIT:
这是基本流程
Mainform>(Showdialog)>form1>(dispose+showDialog)>form2(dispose)>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();
调用Dispose
任何对象(包括称为 的当前对象this
)表示您已经完成了该对象,它最终完成了。
最好是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
如果您正在显示一个表单(不是模态),您可以隐藏父表单,并监听子表单的关闭事件,然后在处理程序中关闭父表单
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 方法时,子窗体将依赖于其父窗体。因此 dispose 的调用将被暂停,直到您完成子表单。
我认为你必须调用“显示”方法,然后你可以调用 dispose 方法。
子窗体的生命周期取决于其父窗体的生命周期,这意味着,一旦您调用父窗体的 parent.close,它将释放该实例创建的所有对象。
您必须独立于父级创建子级。