VC++/CLI Windowsフォームアプリケーションにて開発しています。
Form1、Form2、Form3があってForm1が親フォームです。
Form1からForm2を呼ぶときにForm1のモジュール内で
clsForm2 = gcnew Form2();
clsForm2->Show();
this->clsForm2->Owner = this;
としています。Form2からForm1へアクセスする時は
static_cast<test::Form1^>(this->Owner)->*****
としています。
今回、やりたいことはForm3からForm1へアクセスしたいのです。Form3はForm2から呼ば
れるためForm1とは無縁の関係になっています。このような場合はどのようにしたら良い
でしょうか?親子関係をいろいろ調べているのですが行き詰ってしまったためお力を貸
してください。
>clsForm2->Show();
>this->clsForm2->Owner = this;
これは1行出かけますね。
this->clsForm2->Show(this);
> やりたいことはForm3からForm1へアクセス
Fomr3で同様に
Form2^ f2 = static_cast<test::Form2^>(this->Owner);
として親のForm2のインスタンスを取得してさらに
Form1^ f1 = static_cast<test::Form1^>(f2->Owner);
としてForm1のインスタンスを取得すればいいのでは?
もっとも、私だったらOwnerプロパティのキャストの連続のようつくりにはしませんけ
ど。
(Form2にForm1の操作するデリゲートを設定する。
Form2からは設定されたデリゲートを使ってForm1を操作する。
Form3も同様)
Blueさん
いつもありがとうございます。
Form2からForm3を呼び出すときにForm1を経由して呼び出しているのですがこれも考え方
としては間違いでしょうか?
From2.cpp内で
static_cast<test::Form1^>(this->Owner)->clsForm3 = gcnew Form3();
static_cast<test::Form1^>(this->Owner)->clsForm3->Show();
としています。
Form1のグローバル変数で
Form2^ clsForm2;
Form3^ clsForm3;
と宣言しています。
上記のような場合にBlueさんが提案してくださった
>>Fomr3で同様に
>>Form2^ f2 = static_cast<test::Form2^>(this->Owner);
>>として親のForm2のインスタンスを取得してさらに
>>Form1^ f1 = static_cast<test::Form1^>(f2->Owner);
>>としてForm1のインスタンスを取得すればいいのでは?
は使用出来ますでしょうか?
>Form1のグローバル変数で
メンバ変数ですね。
>static_cast<test::Form1^>(this->Owner)->clsForm3->Show();
static_cast<test::Form1^>(this->Owner)->clsForm3->Show(this);
とすれば出来ます。
Blueさん
いつも迅速なアドバイスありがとうございます。
>>static_cast<test::Form1^>(this->Owner)->clsForm3->Show(this);
上記のコード追加でForm3からForm1へアクセスすることが出来るようになりました。
いつもながら的確なアドバイスありがとうございます。
>>もっとも、私だったらOwnerプロパティのキャストの連続のようつくりにはしませんけ
>>ど。
>>(Form2にForm1の操作するデリゲートを設定する。
>>Form2からは設定されたデリゲートを使ってForm1を操作する。
>>Form3も同様)
デリゲートの方法も興味があるので調べて勉強してみたいと思います。
CLIでのフォーム間の操作は上記のようにオーナーを設定してやって操作するのが普通な
のですかね~。VCのようにポストメッセージが使用出来るのかも謎なところです。