我有兩種形式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