2012-02-21 29 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

相關問題