プロが教えるわが家の防犯対策術!

いつもお世話になっております。

現在フォームAからフォームBをモードレスで呼び出しております。
フォームBが閉じたことをフォームAに知らせたいのですが、
どのようにすればよいか教えて頂けませんでしょうか。

現在下記のタイミングでコーディングすればよいと思うのですが、
いかがでしょうか。
private: System::Void FormB_FormClosing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e) {
//ここにコード記述
}

お手数ですが、よろしくお願いします。

A 回答 (3件)

FormBのFormClosingイベントに


FormAで定義したFormClosingEventHandlerデリゲードを設定する。

// ずっと前のコードに追加

private:
  Form2^ childForm_;
private:
  System::Void ChildForm_Closing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e)
  {
    MessageBox::Show(L"フォームが閉じるよ");
  }
private:
  System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
  {
    if ((this->childForm_ != nullptr) &&
    !this->childForm_->IsDisposed)
    {
      this->childForm_->Close();
      /this->childForm_ = nullptr;
    }
    else
    {
      this->childForm_ = gcnew Form2();
      this->childForm_->FormClosing += gcnew FormClosingEventHandler(this, &Form1::ChildForm_Closing);
      
      this->childForm_->Show();
    }
  }

ただ
>フォームを閉じたこと
だったら、FormClosingではなくFormClosedではないかと。

この回答への補足

回答ありがとうございます。
(返信遅れてすみません。)

※本件はhttp://okwave.jp/qa4865001.htmlで質問させていただいた延長でした。

>FormBのFormClosingイベントに
>FormAで定義したFormClosingEventHandlerデリゲードを設定する。
とはどういうことなのでしょうか。

また、教えていただいたソースは、以下の部分も含めてすべて呼び出し元のフォームに書き込むのでしょうか。
  System::Void ChildForm_Closing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e)
  {
    MessageBox::Show(L"フォームが閉じるよ");
  }

お手数ですが、よろしくお願いします。

補足日時:2009/06/04 10:56
    • good
    • 0

>とはどういうことなのでしょうか。


は示したコードのとおり。

>以下の部分も含めてすべて呼び出し元のフォームに書き込むのでしょうか。
そう。


本気でC++/CLIをやるのであれば、ちゃんとした基本を勉強しておくべきでしょう。

オススメ書籍
http://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5C-CLI- …
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

教えていただいたとおりしたら、何とかできました!
ありがとうございます。

しかしながら、デリゲートをまったく理解していないので、
教えていただいた本を利用して、もう一度勉強させて頂きます。

お礼日時:2009/06/05 08:52

 こんばんは。

こう言う事でしょうか。

//フォームA
public: System::Void FormA::NotifyClosing(System::Windows::Forms::Form^ form)
{
//必要であればformを使用して何かする
}

//フォームB
private: System::Void FormB_FormClosing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e)
{
//ここにコード記述
FormA^ formA = dynamic_cast<FormA^>(this->Owner);
if(formA == nullptr)return;
formA->NotifyClosing(this);
}

この回答への補足

早速のご回答ありがとうございます。

やりたいことは、教えていただいたソースのイメージです。

しかしながら、教えていただいたソースではエラーが
出てしまいました。
(FormAが定義されていませんと出てきます。)

また、
formA->NotifyClosing(this);
のように、formAはNotifyClosingを利用できませんでした。

補足日時:2009/05/28 00:08
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!