No.1ベストアンサー
- 回答日時:
FormAはFormCを開いていることがわかるのであれば、FormBからFormAの関数
を使えるような感じにすればいいかも。
// デリゲードを使う例
// FormB.h
public:
delegate bool IsOtherFormShowed();
IsOtherFormShowed^ IsOtherFormShowed_; // コンストラクタでnullptrを入れておく
private:
System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
if (this->IsOtherFormShowed_ != nullptr)
{
if (this->IsOtherFormShowed_()) {
MessageBox::Show(L"ほかのフォームを開いている");
}
}
}
// FormA.h
private:
bool IsFormCShowed()
{
return (this->FormC_ != nullptr) && !this->FormC_->IsDisposed);
}
// FormBに対するインスタンスを作成する箇所
this->FormB_ = gcnew FormB();
this->FormB_->IsOtherFormShowed_ += gcnew FormB::IsOtherFormShowed(this, &FormA::IsFormCShowed);
デリゲードを使う利点はFormBからはFormAの内容を一切知らなくても使える
ということです。
この回答への補足
ご回答ありがとうございます。
(返信遅れてすみませんでした。)
一応、教えていただいたソースでできたのですが、
警告で以下のメッセージが発生しました。
どこが原因かご教授いただけませんでしょうか。
>warning C4358: '+=': 複合デリゲートの戻り値の型は 'void' ではありません。返された値は定義されていません
(不勉強ですみません。)
No.2
- 回答日時:
かなり邪道だけど。
・フォームのコンストラクタで、誰からでもアクセス可能なグローバル変数に「フォームが開かれる事」をセットする。
例えば、グローバル変数をポインタにしておき、開くフォームのオブジェクトアドレスを代入するとか。
・フォームのデストラクタで誰からでもアクセス可能なグローバル変数に「フォームが破棄された事」をセットする。
例えば、グローバル変数をポインタにしておき、NULLポインタを代入するとか。
そうすれば「いつでもでも、どこでも、誰からでも、そのフォームが開いているか閉じているか」を知る事が出来る。
もし「最小化しているかどうか」を知りたいなら、グローバル変数がヌルかどうか見て、ヌルじゃなけりゃそれが「フォームクラスのオブジェクト」へのポインタだと思って、そのフォーム(そのオブジェクト)のプロパティを調べれば良い。
よく「グローバル変数はクラスのアクセス制御の概念を破壊する」と言うけど「このタイミングでは、AからBのメンバが見えないで困る」って言う場合には、グローバル変数を使うのが手っ取り早い。危険だけどね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Access(アクセス) Accessでセレクタをダブルクリックで別フォームで詳細表示 3 2022/12/20 10:36
- Visual Basic(VBA) VB.net フォーム 親子 1 2022/07/04 19:00
- Google Drive Googleフォームについて(至急) 2 2022/06/28 21:45
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Access(アクセス) マイクロソフト アクセス2021のフォームビュー作成でレイアウトを帳票形式から単票形式にあとから変更 1 2023/03/03 10:56
- Access(アクセス) Accessで独自メニューバーまたはリボンを作成したい 1 2022/12/02 14:31
- その他(プログラミング・Web制作) 入力フォームへ、データを自動的に入力するプログラム。どうやって作る? 4 2023/01/16 10:24
- docomo(ドコモ) ドコモオンラインショップに詳しい方!! 大変困っています。 充電器を購入しましたが、不良品でした。お 3 2023/06/28 20:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAにてメッセージボックスを最...
-
サブフォームのイベント取得
-
Googleフォーム・複数人の申し...
-
リストボックスの選択解除
-
ExcelVBAでフォーム内でブック...
-
サブフォームの行ごとにコンボ...
-
VB.net(VB)で、フォームにExcel...
-
Accessでフォームから別フォー...
-
メインフォームからサブフォー...
-
C# 別なフォームへ値を渡す (...
-
VBプログラムの終了
-
C# マルチディスプレイにて、...
-
サブフォームの新規レコードに...
-
同一のフォームを複数開いて
-
Access 無操作の場合、自動で閉...
-
VB.NET 親フォームから子フォー...
-
ユーザーフォーム上にアイコン...
-
タブコントロールを含んだフォ...
-
ASP.NETとC#でWebフォームを呼...
-
アクセスでフォームで入力 複...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAにてメッセージボックスを最...
-
VB.net(VB)で、フォームにExcel...
-
Accessでフォームから別フォー...
-
リストボックスの選択解除
-
Googleフォーム・複数人の申し...
-
ユーザーフォーム上にアイコン...
-
アクセスVBA フォームのス...
-
VBプログラムの終了
-
アクセス フォームが存在する...
-
サブフォームの新規レコードに...
-
サブフォームの行ごとにコンボ...
-
PDFフォームに本日の日付を自動...
-
accessで2つ以上のフォームを起...
-
メッセージボックスの背景色
-
PDFフォーム内で日付計算したい...
-
VBA リストボックスをダブルク...
-
Access 無操作の場合、自動で閉...
-
ディスプレイ解像度より大きな...
-
フォーム上の全てのコントロー...
-
ToolStripStatusLabelを固定し...
おすすめ情報