c++ builder XE4, 10.2 Tokyo > 子フォームが閉じられたのを親が知るための実装
動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/27)
親(Form1)がインスタンス作成した子フォーム(Form2)がある時、子フォーム側でクローズ処理をした後で親がそのフォームが閉じられたかどうか知る方法を考えてみた。
Form1以外の親でも使えるようにするため、子フォームで親のヘッダファイル(Form1.hなど)をincludeしないという前提。
Form2でIsClosed()を用意
Unit2.cpp
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
m_closed = false;
}
bool __fastcall TForm2::IsClosed()
{
return m_closed;
}
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
m_closed = true;
}
Form2が閉じられた時にm_closedをtrueにしておいて、IsClosed()で親が確認するとした。
Unit1.cpp
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
m_forms[0] = NULL;
m_forms[1] = NULL;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::B_createClick(TObject *Sender)
{
m_forms[0] = new TForm2(this);
m_forms[1] = new TForm2(this);
m_forms[0]->Show();
m_forms[1]->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::B_checkClick(TObject *Sender)
{
TForm2 *formPtr;
for(int idx=0; idx < 2; idx++) {
formPtr = m_forms[idx];
if (formPtr == NULL) {
continue;
}
bool isClosed = formPtr->IsClosed();
String msg3 = L"IsClosed: " + BoolToStr(isClosed);
OutputDebugString(msg3.c_str());
if (isClosed) {
m_forms[idx]->Free();
m_forms[idx] = NULL;
}
}
}
//---------------------------------------------------------------------------
検索用キーワード
(2018-11-05 追記)
- ゾンビ
- ゾンビプロセス
Author And Source
この問題について(c++ builder XE4, 10.2 Tokyo > 子フォームが閉じられたのを親が知るための実装), 我々は、より多くの情報をここで見つけました https://qiita.com/7of9/items/377617e6e737764e1a48著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .