我需要从Windows应用程序的子窗体中关闭父窗体。什么是最好的方法来做到这一点?如何从Windows Forms 2.0中的子窗体关闭父窗体?
回答
当您在WinForms中关闭表单时,它会处理它的所有子项。所以这不是一个好主意。您需要异步执行此操作,例如,您可以向父窗体发送消息。
Form类没有提供对“父”表单的任何引用,所以没有直接访问父表的方法(除非碰巧也是MDI父表,在这种情况下,您可以访问它通过MDIParent属性)。您必须在子构造函数或属性中传递对父项的引用,然后记住设置它,然后使用该引用强制父项关闭。
也许考虑让父母订阅一个关于孩子的事件,并且孩子只要想关闭父母就可以触发该事件。父母可以处理它自己的关闭(和孩子一起)。
你很明显是使用正确的方式打开和关闭窗体。如果您使用任何形式的MVC或MVP,则不会出现此问题。
所以使用MVP或MVC的形式来解决这个问题。
我同意davidg;您可以添加到父窗体的子窗体的构造函数的引用,然后关闭父窗体,因为你需要:
private Form pForm;
public ChildForm(ref Form parentForm)
{
pForm = parentForm;
}
private closeParent()
{
if (this.pForm != null)
this.pForm.Close();
this.pForm = null;
}
我有同样的问题,这种解决方案不适用于我的情况。 也在第二个表格我开始一个线程,这是否造成问题。 – Posto 2009-11-05 13:51:28
我碰到这个博客条目,看起来像它会工作运行和它使用的事件处理程序从D2VIANT概念答案
http://www.dotnetcurry.com/ShowArticle.aspx?ID=125
摘要: 第1步:创建一个新的Windows应用程序。打开Visual Studio 2005或2008.转到文件>新建>项目>在“项目类型”> Windows应用程序中选择Visual Basic或Visual C#。给项目一个名称和位置>确定。
步骤2:在项目中添加一个新的 表格。右键单击项目>添加> 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();
}
有一个非常简单的解决方案这一点。
问题(确定):启动应用程序(主窗体)>打开主窗体VIA按钮或任何事件的子窗体>关闭(主窗体)但子窗体也关闭。
解决方案:
用途:
Process.Start("Your_App's_EXE_Full_Path.exe");
示例:试试以获得完整的路径:
string FullPath = Environment.CurrentDirectory + "\\YourAppName.exe";
Process.Start(FullPath);
。
this.Close();
- 这样你会得到保持各种形式要保持开放。
- 1. 从子窗体关闭父窗体
- 2. 子窗体关闭时父窗体关闭
- 3. Windows窗体 - 从父窗体
- 4. 从子线程关闭父窗体
- 5. C# - 从父项关闭子窗体
- 6. 关闭子窗体时从父窗体更改LayoutMdi
- 7. 关闭对话框窗体关闭父窗体
- 8. 如何在PowerShell中关闭Windows窗体?
- 9. 如果用户点击“X”按钮,从子窗体关闭父窗体
- 10. 如何从子窗体更新MDI父窗体中的控件?
- 11. Rails的:子窗体在父窗体
- 12. 父窗体关闭时如何关闭在自己的线程中运行的子窗体? (非MDI)
- 13. Windows窗体:关闭,但不关闭
- 14. Windows窗体关闭后不关闭?
- 15. C#窗体窗体:Mdi父窗体和子窗体问题
- 16. 在弹出窗体关闭时刷新子窗体
- 17. 如何从另一个MDI子窗体关闭特定的MDI子窗体子窗体
- 18. 如何关闭MDI子窗体C#
- 19. 如何从子窗体设置父窗体WindowState属性?
- 20. 如何将数据从子窗体传递给父窗体
- 21. 如何将值从子窗体传递给父窗体?
- 22. 如何将数据从子窗体移动到父窗体?
- 23. 从父窗口关闭子窗口
- 24. 从子窗口关闭父窗口
- 25. 在javascript中关闭父窗口时如何关闭子窗口?
- 26. 如何在父窗体的中心设置子窗体?
- 27. 如何覆盖子窗体中的父窗体映射?
- 28. 如何更改父窗体中子窗体控件的属性
- 29. 从子窗体返回父窗体时调用父窗体方法
- 30. VB.NET在子窗体的子窗体(实例)中运行父窗体(实例)
不知道你所说的 “子窗体” 的意思。也许这是一个窗体上的面板上的按钮?或者它是一个MDI的东西?或者是孩子形成一个对话框? – 2008-09-03 02:31:18