- PR -

子フォームから別の子フォームを開きたい(VC)

投稿者投稿内容
wig
会議室デビュー日: 2004/12/12
投稿数: 10
投稿日時: 2004-12-12 21:34
開発環境:Windows2000/VC++.NET2003
Windowsフォームアプリケーションを利用して、子フォーム(Form2)にあるボタンをクリックしてもう一方の子フォーム(Form3)を開きたいです。
現在、子フォームはプロパティウィンドウのMDIをtrueにして可能にし、
親フォームからForm2->Show();のメソッドでそれぞれの子フォームを表示させています。
VBやC♯の情報はあるみたいなのですが経験がないのでいまいちよく分かりません。
C++のものを知りたいです。
私自身VCを始めてまだ日が浅いので出来れば分かりやすく教えていただきたいです。
正直困っています。ご教授のほどをよろしくお願いします。
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2004-12-13 10:41
引用:

Windowsフォームアプリケーションを利用して、子フォーム(Form2)にあるボタンをクリックしてもう一方の子フォーム(Form3)を開きたいです。
現在、子フォームはプロパティウィンドウのMDIをtrueにして可能にし、


MDIをtrue? IsMdiContainerプロパティの事かな?
子フォーム(Form2とForm3)のIsMdiContainerプロパティをtrueに設定して…

引用:

親フォームからForm2->Show();のメソッドでそれぞれの子フォームを表示させています。
VBやC♯の情報はあるみたいなのですが経験がないのでいまいちよく分かりません。
C++のものを知りたいです。
私自身VCを始めてまだ日が浅いので出来れば分かりやすく教えていただきたいです。
正直困っています。ご教授のほどをよろしくお願いします。


Form2のボタンがクリックされたときにForm2を表示させたのと同じ要領でForm3を表示させれますがそういうことではない?
wig
会議室デビュー日: 2004/12/12
投稿数: 10
投稿日時: 2004-12-13 15:31
Kazukiさん、ありがとうございます。

はいそうです。
IsMdiContainerプロパティ=trueでForm1(親)Form2(子)Form3(子)を設定しております。

引用:

子フォーム(Form2とForm3)のIsMdiContainerプロパティをtrueに設定して…
Form2のボタンがクリックされたときにForm2を表示させたのと同じ要領でForm3を表示させれますがそういうことではない?



上記の要領で以下のようにコーディングしてみたのですが・・・
#include "Form3.h"←ヘッダーファイル宣言

private: System::Void button1_Click(System:bject * sender,System::EventArgs * e)
   {
Form3 *newMDIChild = new Form3();
// Set the Parent Form of the Child window.
newMDIChild->MdiParent = this;
// Display the new form.
newMDIChild->Show();
    }

実際にプログラムを実行させてForm1(親)からForm2を表示させる前にプログラムは停止してメッセージボックスに以下のようなものが表示されました。

'System.ArgumentException' のハンドルされていない例外が system.windows.forms.dll で発生しました。
追加情報 : フォームを MDI 子フォームと MDI 親フォームにすることはできません。

おそらく同じフォームに親と子の権限を与えるのは無理ではないかと思うのですが、私のコーディングが間違っているのでしょうか??
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2004-12-14 10:47
Form1のMdi子ウィンドウとしてForm2
さらにForm2のMdi子ウィンドウとしてForm3をってことですか。
やっとわかりました。
 
どうやら例外のメッセージを見る限りMdiの子ウィンドウをMdiの親ウィンドウにするのは無理みたいですね。
C#とかでの情報はあると書いてましたけどC#やVB.NETではそうやってるサンプルがあったんですか??あるならそれをMC++に直すだけなので教えてもらえませんか?
wig
会議室デビュー日: 2004/12/12
投稿数: 10
投稿日時: 2004-12-14 15:20
Kazukiさん、本当にありがとうございます。

引用:

Form1のMdi子ウィンドウとしてForm2
さらにForm2のMdi子ウィンドウとしてForm3をってことですか。
やっとわかりました。



いいえ、違います。
あくまでもForm2とForm3はForm1のMdi子フォームとして扱いたいのです。
そして、Mdi子フォームであるForm2からボタンを押して同じ子フォームであるForm3を開きたいのです。

引用:

どうやら例外のメッセージを見る限りMdiの子ウィンドウをMdiの親ウィンドウにするのは無理みたいですね。
C#とかでの情報はあると書いてましたけどC#やVB.NETではそうやってるサンプルがあったんですか??あるならそれをMC++に直すだけなので教えてもらえませんか?



サンプルではなくて、他のサイトを色々と見て回っていて・・・
今のところ自分がやりたいことを書いてあるサイトは以下の二つです。
(掲示板ですが・・・)
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=11402&forum=7
http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=res&namber=7602&page=&no=0
おそらく見て頂ければ私のやりたいことがわかるかと思います。
言葉足らずで本当にすみません。


あと、Mdiの親子関係を作らなくても、あるフォームから別のフォームを開く・・・といった方法があるようなら教えていただきたいです。
とっと
大ベテラン
会議室デビュー日: 2004/03/25
投稿数: 197
投稿日時: 2004-12-14 15:31
こんにちは。

>あくまでもForm2とForm3はForm1のMdi子フォームとして扱いたいのです。
>そして、Mdi子フォームであるForm2からボタンを押して同じ子フォームであるForm3を開きたいのです。

えっと、ここしか読んでなくて申し訳ないですが、
Form2・Form3を開く処理は両方とも親フォームに記述します。

その処理をそれぞれの子フォームから呼出せば良いのではないでしょうか?
kanai
ベテラン
会議室デビュー日: 2004/09/13
投稿数: 98
投稿日時: 2004-12-14 15:48
Form2からForm3を開く処理で、

newMDIChild->MdiParent = this->MdiParent;

のようにすればいかがでしょうか?
wig
会議室デビュー日: 2004/12/12
投稿数: 10
投稿日時: 2004-12-20 15:51
返信遅くなってごめんんさい。

引用:

kanaiさんの書き込み (2004-12-14 15:48) より:
Form2からForm3を開く処理で、

newMDIChild->MdiParent = this->MdiParent;

のようにすればいかがでしょうか?



kanaiさんにご教授いただいた方法で無事に子フォームを表示することができました。

さらに別に親子関係を作らなくても
Form3 *newMDIChild = new Form3();
newMDIChild->Show();
だと普通にフォームを開くことが出来ると言うのも発見しました!!
どちらの方法が良いのかまた考えて行きたいと思います。
皆さん本当にありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)