私はまだvclフォームでC++を勉強していますので、私が尋ねることがわかりやすい場合は私を許してください。参考までに、私はWindows環境でC++ builder 10.1 berlinを使用しています。C++ with vcl:クローズセカンダリフォームはプロセスを終了しません
私は2つのフォーム( "MainForm"と "BackupForm"と呼ぶ)を持つプログラムを持っています。私はMainFormでユーザー入力を受け入れています。次に、ユーザーが特定のボタン(DoSomething)をクリックすると、そのアクションがいくつかの変数を設定すると、BackupForm->Show();
を呼び出して、MainForm->Hide();
を呼び出してより多くのことを行う2番目のフォームに切り替えます。
問題は、ユーザーが通常はプログラムを閉じる右上の「X」をクリックすると、BackupFormが閉じられ、プロセスが終了しないという問題です。 MainFormで同じアクションを実行すると、プロセスは終了します。
私は周りを見回し、正しい質問をしていない人はいませんが、私はこの問題を抱えています。あるいは、フォームを切り替えるために隠れている/表示しているのが正しい方法ではありません。これは:
TLDR:方法/方法/等がありますか?セカンダリフォームで「閉じるウィンドウ」ボタンが押されたことを検出し、その後アプリケーションを終了し、タスクマネージャでそのアプリケーションを終了させることなくプロセスを終了しますか?
私が気づいていないフォームを切り替えるには、より良い方法がある場合は、その目的のための提案も気にしません。
また、必要に応じてさらにコードを投稿することができますが、実際に何が役立つかはわかりませんでした。以下は、私が持っているものの一部です:
メイン(機能用途?)私のIDEによって事前に生成された: "MainFormを" に押され
#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":
void __fastcall TMainForm::ExecuteCopyClick(TObject *Sender)
{
//Setting variables....
//Then:
BackupForm->Show();
MainForm->Hide();
}
ありがとう!何らかの理由で、2つの 'FormClose'メソッドを自分のコードで追加することはできませんでしたが、' ShowModal'の2番目の解決策はうまくいくように見えました。 – RisaAudr
'FormClose()'メソッドをコードに追加するだけでは不十分です。実際にそれらを 'OnClose'イベントに割り当てる必要があります。正しく使用するとうまく動作します。 –
FormCloseメソッドをOnCloseイベントにどのように割り当てますか?私はそうする方法のドキュメントを見つけるのに苦労しています... – RisaAudr