我需要从Windows应用程序中关闭子窗体内的父窗体。最好的方法是什么?
答案 0 :(得分:4)
我遇到了这个博客条目,看起来它会起作用,它使用D2VIANT答案的事件处理程序概念
http://www.dotnetcurry.com/ShowArticle.aspx?ID=125
要点: 第1步:创建一个新的Windows应用程序。打开Visual Studio 2005或2008.转到文件>新>项目>在“项目类型”>中选择Visual Basic或Visual C#。 Windows应用程序。为项目命名和位置>行。
第2步:添加一个n 以项目形式出现。右键单击项目>添加> Windows窗体> Form2.cs>添加。
步骤3:现在在Form1中,拖放一个按钮'btnOpenForm'并双击它以生成一个事件处理程序。在其中写下以下代码。还要添加frm2_FormClosed事件处理程序,如下所示:
private void btnOpenForm_Click(object sender, EventArgs e)
{
Form2 frm2 = new Form2();
frm2.FormClosed += new FormClosedEventHandler(frm2_FormClosed);
frm2.Show();
this.Hide();
}
private void frm2_FormClosed(object sender, FormClosedEventArgs e)
{
this.Close();
}
答案 1 :(得分:3)
当您在WinForms中关闭表单时,它会释放它的所有子项。所以这不是一个好主意。您需要异步执行此操作,例如,您可以向父表单发送消息。
答案 2 :(得分:0)
Form类没有提供对'parent'表单的任何类型的引用,因此没有直接访问父类的方法(除非它恰好是MDI父类,在这种情况下你可以通过它访问它) MDIParent属性)。您必须在子项的构造函数或属性中传递对父项的引用,然后记住设置它,然后使用该引用强制父项关闭。
答案 3 :(得分:0)
或许考虑让父订阅子事件上的事件,并且孩子可以在想要关闭父事件时触发该事件。然后,父母可以处理它自己的关闭(以及孩子的关闭)。
答案 4 :(得分:0)
你显然正在使用正确的方式来打开和关闭表格。如果您使用任何形式的MVC或MVP,则不会出现此问题。
所以使用MVP或MVC的形式来解决这个问题。
答案 5 :(得分:0)
我同意davidg;您可以将父表单的引用添加到子表单的构造函数,然后根据需要关闭父表单:
private Form pForm;
public ChildForm(ref Form parentForm)
{
pForm = parentForm;
}
private closeParent()
{
if (this.pForm != null)
this.pForm.Close();
this.pForm = null;
}
答案 6 :(得分:0)
这是一个非常简单的解决方案。
问题(可以肯定):启动应用程序(主窗体)>主要表格VIA按钮或任何活动的公开儿童表格>关闭(主要表格)但儿童表格也关闭。
解决方案:
使用:
Process.Start("Your_App's_EXE_Full_Path.exe");
示例:尝试此操作以获取完整路径:
string FullPath = Environment.CurrentDirectory + "\\YourAppName.exe";
Process.Start(FullPath);
。- 醇>
this.Close();
- 这样你就可以保留你想要保持开放的每一个表格。