0

我希望我的代码在不关闭应用程序的情况下关闭当前表单并打开另一个表单(在 Visual C++ 2010 Express 中)。这是我尝试使用的代码:

Form2^ form2=gcnew Form2();
form2->Show();
this->Close();

当所有表单都关闭后,应用程序应该关闭,所以this->Hide()不会工作。

4

1 回答 1

2

打开项目中的主 .cpp 源代码文件,该文件包含 main() 函数。您将在该函数中看到与此类似的语句:

Application::Run(gcnew Form1);

Run() 方法的这种重载将导致程序在应用程序的主窗体关闭时终止。如果您想保持它运行,那么您需要以不同的方式执行此操作。就像使用普通的 Run() 重载并在所有窗口关闭时调用 Application::Exit() 一样。您可以通过订阅 FormClosed 事件来做到这一点,如下所示:

void ExitWhenLastWindowClosed(Object^ sender, FormClosedEventArgs^ e) {
    if (Application::OpenForms->Count == 0) Application::Exit();
    else Application::OpenForms[0]->FormClosed += gcnew FormClosedEventHandler(ExitWhenLastWindowClosed);
}

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false); 
    Form1^ first = gcnew Form1();
    first->FormClosed += gcnew FormClosedEventHandler(ExitWhenLastWindowClosed);
    first->Show();
    Application::Run();
    return 0;
}
于 2012-11-07T16:13:12.510 回答