我还在学习使用vcl表单的c ++,所以请原谅我,如果我要求的结果比看起来更简单。作为参考,我在Windows环境中使用c ++ builder 10.1 berlin。
我有一个包含两种形式的程序(让我们称之为“MainForm”和“BackupForm”)。我在MainForm中接受用户输入,然后当用户单击某个特定按钮(“DoSomething”)时,该操作设置了一些变量,然后调用BackupForm->Show();
然后调用MainForm->Hide();
切换到第二个表单的东西。
我遇到的问题是:如果用户单击右上角的“X”(通常关闭程序),它只关闭BackupForm并且不会结束该过程。如果我在MainForm上执行相同的操作,则会结束该过程。
我环顾四周,要么没有问正确的问题,要么没有人,但我有这个问题,或者隐藏/显示切换表单不是正确的方法,但我的整体问题是这个:
TLDR: 是否有方法/方法/等。检测在辅助表单上按下“关闭窗口”按钮,然后关闭应用程序,结束它的进程而不必在任务管理器中将其终止?
如果有更好的方法来切换我不知道的表格,我也不介意为此目的提出建议。
另外,如果需要,我可以发布更多代码,但我不确定实际上会有什么帮助。以下是我的一些内容:
Main(Function?Application?)我的IDE预先生成:
#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
//------------------------------------------------------------------------
USEFORM("BackupFormCode.cpp", BackupForm);
USEFORM("UserBackupProgram.cpp", MainForm);
//----------------------------------------------------------------------
int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
try
{
Application->Initialize();
Application->MainFormOnTaskBar = true;
Application->CreateForm(__classid(TMainForm), &MainForm);
Application->CreateForm(__classid(TBackupForm), &BackupForm);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
按钮“DoSomething”在“MainForm”中按下:
void __fastcall TMainForm::ExecuteCopyClick(TObject *Sender)
{
//Setting variables....
//Then:
BackupForm->Show();
MainForm->Hide();
}
答案 0 :(得分:1)
首先自动创建MainForm
,因此设置为Application->MainForm
。
当Application->MainForm
实际关闭时,会调用Application->Terminate()
,导致Application->Run()
退出,从而允许WinMain()
退出并终止进程。
当您展示BackupForm
时,您只是隐藏 MainForm
,而不是关闭它。所以Application->Terminate()
没有被调用。
如果您希望在BackupForm
关闭时终止流程,则需要:
Close()
Application->MainForm
:
void __fastcall TBackupForm::FormClose(TObject *Sender, TCloseAction &Action)
{
Application->MainForm->Close();
}
或者:
void __fastcall TMainForm::ExecuteCopyClick(TObject *Sender)
{
//Setting variables....
//Then:
Hide();
BackupForm->ShowModal();
Close();
}
直接致电Application->Terminate()
:
void __fastcall TBackupForm::FormClose(TObject *Sender, TCloseAction &Action)
{
Application->Terminate();
}