DOBON.NET DOBON.NETプログラミング掲示板過去ログ

子フォームから子フォームの呼び出し

環境/言語:[Framework1.1]
分類:[.NET]

お世話になってます。

質問ですが、MDIフォームを使った場合に
子フォームAから子フォームBを呼べますか?
あと子フォームBが表示されたら子フォームAは消してしまいたいです。

よろしくお願いします。
> 質問ですが、MDIフォームを使った場合に
> 子フォームAから子フォームBを呼べますか?

フォームを「MDI子フォーム」として表示する方法がわかれば
親→子であれ子→子であれ基本は同じであることがわかるでしょう。

> あと子フォームBが表示されたら子フォームAは消してしまいたいです。

せっかく、このどぼんさんのサイトへ来られたのですから、
Tipsのページを一度見てみましょう。
上記のほとんどが解決するはずです。
その上でわからないことがあればまたここへ書いてみてください。

> フォームを「MDI子フォーム」として表示する方法がわかれば
> 親→子であれ子→子であれ基本は同じであることがわかるでしょう。

親→子と同じ呼び方をした場合には、子フォームBが表示されないんです。
呼ぶときに親フォームの指定をしないとMDIの外に表示されてしまいますし。
MDIの場合には何か特別な処理が必要なのでしょうか?

> せっかく、このどぼんさんのサイトへ来られたのですから、
> Tipsのページを一度見てみましょう。
> 上記のほとんどが解決するはずです。
> その上でわからないことがあればまたここへ書いてみてください。

一応どぼんさんのサイトは見たのですが、MDI関連のところには
無いようでしたのでここで質問させてもらってます。
ちなみにMDIでないフォームを普通に消すことはできます。
> 親→子と同じ呼び方をした場合には、子フォームBが表示されないんです。
> 呼ぶときに親フォームの指定をしないとMDIの外に表示されてしまいますし。
> MDIの場合には何か特別な処理が必要なのでしょうか?

同じというのは手続きが同じという意味ですので
つまり親をちゃんと指定してあげればよいです。
で、子から子へですのでどうやって親を知るかが問題ですが
フォームのプロパティを調べてみてください。
自分にとっての親が誰かを知ることができます。

> ちなみにMDIでないフォームを普通に消すことはできます。

つまり自分を閉じることができているということですよね。
消し方に違いはありませんので、別の子を表示するコードに続いて
うまく言っているのと同じように自分を閉じればよいと思います。
まどかさんありがとうございます。
さきほどはお礼が抜けていてすいませんでした。

> 同じというのは手続きが同じという意味ですので
> つまり親をちゃんと指定してあげればよいです。
> で、子から子へですのでどうやって親を知るかが問題ですが
> フォームのプロパティを調べてみてください。
> 自分にとっての親が誰かを知ることができます。

> つまり自分を閉じることができているということですよね。
> 消し方に違いはありませんので、別の子を表示するコードに続いて
> うまく言っているのと同じように自分を閉じればよいと思います。

親から子フォームを呼ぶときは
 Child1.Mdiparent = Me
Child1.Show
子から子フォームのときは
Dim ParentForm as New ParentForm(←親です)
 Dim Child2 as New Child2

Child1.Close

Child2.Mdiparent = ParentForm
Child2.Show

というようなコードを書いてます。
Child1.Closeがないとまったく動いてくれません。
逆にある場合は子フォームがすべて消えてしまいます。。。
> 親から子フォームを呼ぶときは
>  Child1.Mdiparent = Me
> Child1.Show

OK!

> 子から子フォームのときは
> Dim ParentForm as New ParentForm(←親です)

もうすでに親がいるのにNewしてますよね。
Newは新しく作ると言う意味ですので、正しく動きませんよね。

> Child2.Mdiparent = ParentForm

ここで、自分(Child1)に設定されている親をChild2にも設定してあげます。
MDIParentプロパティは設定だけではなく参照も可能なプロパティです。
ずばり書いちゃいますが、
Child2.MDIParent = Me.MDIParent
です。

> Child1.Closeがないとまったく動いてくれません。
> 逆にある場合は子フォームがすべて消えてしまいます。。。

MDIParentは1つしか存在できませんので、Newした段階で古いものが破棄されるのです。
まどか様ありがとうございました。

言われた方法で解決できました。
親フォームを新規に作成していたのがまずかったんですね。
たいへん参考になりました。
ありがとうございます。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板