![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAにてメッセージボックスを最...
-
Accessでフォームから別フォー...
-
メッセージボックスの背景色
-
ACCESS VBAサブフォーム(DATA S...
-
Googleフォーム・複数人の申し...
-
アクセスVBA フォームのス...
-
リストボックスをクリックする...
-
アクセス フォームが存在する...
-
サブフォームの行ごとにコンボ...
-
C#で作成したDLLをDelphiで呼ぶ...
-
Access サブフォームでの複数行...
-
サブフォームの新規レコードに...
-
accessで2つ以上のフォームを起...
-
ACCESS 表形式フォームで1レ...
-
サブフォームのサブフォームの...
-
子フォームから親フォームのオ...
-
ACCESSで、新規か更新かの判断
-
Accessでの顧客管理フォームを...
-
VBA リストボックスをダブルク...
-
フォーム上の全てのコントロー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Googleフォーム・複数人の申し...
-
Accessでフォームから別フォー...
-
VBAにてメッセージボックスを最...
-
リストボックスの選択解除
-
メッセージボックスの背景色
-
accessで2つ以上のフォームを起...
-
サブフォームの新規レコードに...
-
フォーム上の全てのコントロー...
-
アクセスVBA フォームのス...
-
サブフォームの行ごとにコンボ...
-
サブフォームのイベント取得
-
メインフォームからサブフォー...
-
Access 無操作の場合、自動で閉...
-
VBAでフォームのスクロールバー...
-
ディスプレイ解像度より大きな...
-
ユーザーフォーム上にアイコン...
-
VBプログラムの終了
-
PDFフォームに本日の日付を自動...
-
ExcelVBAでフォーム内でブック...
-
アクセス フォームが存在する...
おすすめ情報