我有两种形式Form1
和Form2
和Form1
我写了下面的代码:应用程序仍然存在于内存中,尽管它是封闭的
#include "Form2"
//
//
Form2^ obj = gcnew Form2();
obj->Show();
this->Hide();
//
//
问题是,当我通过X按钮关闭的Form2
屏幕,该应用程序仍然存在于内存中,因为基本形式Form1
仅被隐藏但未关闭。我能做什么?
我有两种形式Form1
和Form2
和Form1
我写了下面的代码:应用程序仍然存在于内存中,尽管它是封闭的
#include "Form2"
//
//
Form2^ obj = gcnew Form2();
obj->Show();
this->Hide();
//
//
问题是,当我通过X按钮关闭的Form2
屏幕,该应用程序仍然存在于内存中,因为基本形式Form1
仅被隐藏但未关闭。我能做什么?
我解决了它基于HansPassant的评论。首先,需要声明Form2_FormClosed像的事件处理程序:
this->FormClosed += gcnew FormClosedEventHandler(this, &Form2::Form2_FormClosed);
然后使用它像:
private: System::Void Form2_FormClosed(){
Application::Exit();
}
您必须在退出时关闭底层窗体。
尝试覆盖OnClosing
方法Form2
和力From1
与Close
方法关闭的话..
是的,这是因为你的父母或第一种形式仍然是开放的,你就必须隐藏,你应该使用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();
您可以将您的代码转换为'C++/CLI'吗?当我按下X按钮时,如何将该代码执行? – Aan 2012-02-21 11:43:50
这只是解决方法,更优雅的方式是引用父窗体并关闭它... – 2012-02-21 12:27:52
你已经回答了你自己的问题 - 它只是隐藏,在这里,你需要关闭/处置的。 – Widor 2012-02-21 10:42:38
在Form2 FormClosed事件中调用Application :: Exit()。 – 2012-02-21 13:22:07
@HansPassant:它不起作用,编译好但没有效果。 – Aan 2012-02-21 13:53:02