2012-02-21 30 views
1

我有两种形式Form1Form2Form1我写了下面的代码:应用程序仍然存在于内存中,尽管它是封闭的

#include "Form2" 
// 
// 
Form2^ obj = gcnew Form2(); 
obj->Show(); 
this->Hide(); 
// 
// 

问题是,当我通过X按钮关闭的Form2屏幕,该应用程序仍然存在于内存中,因为基本形式Form1仅被隐藏但未关闭。我能做什么?

+2

你已经回答了你自己的问题 - 它只是隐藏,在这里,你需要关闭/处置的。 – Widor 2012-02-21 10:42:38

+1

在Form2 FormClosed事件中调用Application :: Exit()。 – 2012-02-21 13:22:07

+0

@HansPassant:它不起作用,编译好但没有效果。 – Aan 2012-02-21 13:53:02

回答

0

我解决了它基于HansPassant的评论。首先,需要声明Form2_FormClosed像的事件处理程序:

this->FormClosed += gcnew FormClosedEventHandler(this, &Form2::Form2_FormClosed); 

然后使用它像:

private: System::Void Form2_FormClosed(){ 
Application::Exit(); 
} 
0

您必须在退出时关闭底层窗体。

尝试覆盖OnClosing方法Form2和力From1Close方法关闭的话..

-1

是的,这是因为你的父母或第一种形式仍然是开放的,你就必须隐藏,你应该使用OBJ。 ShowDialog()函数,它将弹出第二个窗体并且第一个窗体将不可访问...直到第二个窗体关闭...

另一种方法是使用System.Diagnotics命名空间并使用过程类,并获得您的应用程序的所有实例,然后以编程方式结束进程... 像这样... 使用System.Diagnostics;

private Process GetaProcess(string processname) 
{ 
Process[] aProc = Process.GetProcessesByName(processname); 

if (aProc.Length > 0) 
return aProc[0]; 

else return null; 
} 
Process myprc = Call GetaProcess("Your_app_process_name.exe"); myprc.Kill(); 
+0

您可以将您的代码转换为'C++/CLI'吗?当我按下X按钮时,如何将该代码执行? – Aan 2012-02-21 11:43:50

+0

这只是解决方法,更优雅的方式是引用父窗体并关闭它... – 2012-02-21 12:27:52

相关问题