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

[戻る]
ao 2004/12/12(日) 21:46:50
開発環境:Windows2000/VC++.NET2003
Windowsフォームアプリケーションを利用して、子フォーム(Form2)にあるボタンをクリ
ックしてもう一方の子フォーム(Form3)を開きたいです。
現在、子フォームはプロパティウィンドウのMDIをtrueにして可能にし、
親フォームからForm2->Show();のメソッドでそれぞれの子フォームを表示させていま
す。
私自身VCを始めてまだ日が浅いので出来れば分かりやすく教えていただきたいです。
正直困っています。ご教授のほどをよろしくお願いします。

123 2004/12/14(火) 12:01:41
何がしたいのかわかりません。

SDIで画面を切り替えたいのか。 
MDIで画面を新規作成したいのか。
MDIならば、ボタンを押すたびに複数同じ画面を表示するのか、開いていればアクティブ
にするのか。
また、現在の状態で何をどう改善したいのか

ao 2004/12/14(火) 15:30:25
123さん、ありがとうございます。
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
を参考にしてWindowsアプリケーションを作成しています。

現在の状態は、親フォーム(Form1)があり、そこのメニューリストからアイテムを選択
すると、
private: System::Void menuItem1_Click(System::Object * ender,System::EventArgs 
*  e)
 {
   Form2 *newMDIChild = new Form2();
   // Set the Parent Form of the Child window.
   newMDIChild->MdiParent = this;
   // Display the new form.
   newMDIChild->Show();

}
の要領でForm1の子フォーム(Form2)を表示させています。
同じ要領でForm1の子フォームであるForm3も表示させているのですが、(ここまでが現在
の状態)
私はForm2から同じ子フォームであるForm3を表示させたいのです。

分かっていただけたでしょうか??

PATIO 2004/12/14(火) 15:52:11
えーと、多分VBをされていたのだと思うのですが、
VC特有の表現を早く覚えた方が良いと思います。
VBとはニュアンスが異なったりしますので、話が通じにくくなります。
フォームと言われているのはMDIの子フレームなのではないですか?
基本的にVCではフォームと言う言い方はしないです。
ウインドウもフレームウインドウとクライアント領域は分けて考えますし。
VBとはかなり違うと思います。
あと、普通MDIの場合、子フレームの親はメインフレームになるので
今の構成もなんだかおかしいような気がします。
子フレームならメインフレームに依頼してオープンさせて
メインフレームを通して連携させるとかの方が構成的にはあっているような。
子フレームから起こすなら普通はダイアログを使うような気がします。
ウインドウの構成の話なのでそういう構成が仕様なんだと言われると
なんとも反論のしようがないのですけれど。
MDIとかSDIとかダイアログベースとかそういった基本的なウインドウ構成を
勉強された方がよいように感じます。

シャノン 2004/12/14(火) 17:35:46
メインフレーム云々つーか、示されたコードは MC++ っすよね。

123 2004/12/14(火) 23:28:26
VC の NET Framework で作っているようですが
知識がないのでわかりません。
たぶん C# のラウンジの方に聞いた方がいいのでは

シャノン 2004/12/14(火) 23:54:16
> 分かっていただけたでしょうか??

わかりません。

> 私はForm2から同じ子フォームであるForm3を表示させたいのです。

とは、どういうことなのでしょうか?
Form1 のメニューをクリックすると子である Form2 が表示される。ここまでは OK。
それから? 即座に Form3 を表示したいんですか?
で、Form3 を表示するコードが Form2 の中にあればいい?

であれば、Form2 の Load イベントにでも

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

こんな感じでいいんでない?

PATIO 2004/12/15(水) 10:57:15
ああ、これが噂のMC++なんですね。

επιστημηさんが別物だと言われてましたが、本とに別物だ。
MFCとも根本的に違うみたいだし。
MC++の方は勉強してないので良くわからないです。
今度から、.net系の質問は注意しないと見当違いの書き込みしそう。
MC++となるとそっち系の掲示板の方が話が早いかな。
C#の板の方が適任ならそちらの方が良いかもしれないですね。

ao 2004/12/20(月) 15:44:40
[[解決]]
遅くなってすみません。
シャノンさんに教えていただいた方法でできました!!!

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

です。
ずっと悩んでいたのに本当に感動しました。
言葉足らずな説明で本当にすみません。
ありがとうございました。

古いスレッドには追加発言できません。