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

MDIを使用し子フォームから別の子フォームを開くには?

分類:[.NET]

MDIフォームを作成しています、親フォーム(Form1)から子フォーム(form2)を
開く事はできるのですが、子フォーム(form2)のButton1をクリックした時に
子フォーム(form2)を閉じ、子フォーム(form3)を開くにはどのようにすれば
よいでしょうか?
> MDIフォームを作成しています、親フォーム(Form1)から子フォーム(form2)を
> 開く事はできるのですが、子フォーム(form2)のButton1をクリックした時に
> 子フォーム(form2)を閉じ、子フォーム(form3)を開くにはどのようにすれば
> よいでしょうか?

Form1からform2を開く場合とform2からform3を開く場合で特に違わないはずですが、
現状としてどうやっていて、どううまくいかないのでしょうか?
■No1058に返信(よねKENさんの記事)
>>MDIフォームを作成しています、親フォーム(Form1)から子フォーム(form2)を
>>開く事はできるのですが、子フォーム(form2)のButton1をクリックした時に
>>子フォーム(form2)を閉じ、子フォーム(form3)を開くにはどのようにすれば
>>よいでしょうか?
>
> Form1からform2を開く場合とform2からform3を開く場合で特に違わないはずですが、
> 現状としてどうやっていて、どううまくいかないのでしょうか?



よねKENさんこんにちは、

Form1をMDIコンテナ(親)としています、Form1ロード時にForm2が子フォームとして
開くように

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim FormChild1 As New Form2
FormChild1.MdiParent = Me
FormChild1.Show()
End Sub

としています。これは正常に作動します。

次に子フォームとして開いたForm2にはButton1があり、これをクリックするとForm2
を閉じ、新たな子formであるForm3を開くようにしたいのですが

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

DIM MyForm1 As Form1
Dim MyForm3 As New Form3

MyForm3.MdiParent = MyForm1
MyForm3.Show()
Me.Close()

End Sub

とした場合、子Form3はMDIではなく別ウィンドで開いてしまいます・・・。

たぶんどこか基本的な部分を理解していないからだと思うのですが、それがどこなのか、どこを
勉強していけばよいのかわかりません、よろしくお願いします。
> 次に子フォームとして開いたForm2にはButton1があり、これをクリックするとForm2
> を閉じ、新たな子formであるForm3を開くようにしたいのですが
>
> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
>
> DIM MyForm1 As Form1
> Dim MyForm3 As New Form3
>
> MyForm3.MdiParent = MyForm1
> MyForm3.Show()
> Me.Close()
>
> End Sub
>
> とした場合、子Form3はMDIではなく別ウィンドで開いてしまいます・・・。
MyForm1は空っぽですから、
MyForm3.MdiParent = MyForm1

MyForm3.MdiParent = Nothing
と書いているのと同じです。

MDIの親フォームもform2もインスタンスを保持する変数はすでに破棄されてなくなっているので、

MyForm3にMDIの親を設定しようと思ったら、form2のMdiParentプロパティに設定されているForm1オブジェクトを設定する必要があります。

MyForm3.MdiParent = Me.MdiParent ' ここでのMeとは今表示されているform2のこと
' Me.MdiParentとはform2の親フォーム(Form1)のこと
■No1066に返信(よねKENさんの記事)
>>次に子フォームとして開いたForm2にはButton1があり、これをクリックするとForm2
>>を閉じ、新たな子formであるForm3を開くようにしたいのですが
>>
>> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
>>
>> DIM MyForm1 As Form1
>> Dim MyForm3 As New Form3
>>
>> MyForm3.MdiParent = MyForm1
>> MyForm3.Show()
>> Me.Close()
>>
>> End Sub
>>
>>とした場合、子Form3はMDIではなく別ウィンドで開いてしまいます・・・。
> MyForm1は空っぽですから、
> MyForm3.MdiParent = MyForm1
> は
> MyForm3.MdiParent = Nothing
> と書いているのと同じです。
>
> MDIの親フォームもform2もインスタンスを保持する変数はすでに破棄されてなくなっているので、
>
> MyForm3にMDIの親を設定しようと思ったら、form2のMdiParentプロパティに設定されているForm1オブジェクトを設定する必要があります。
>
> MyForm3.MdiParent = Me.MdiParent ' ここでのMeとは今表示されているform2のこと
> ' Me.MdiParentとはform2の親フォーム(Form1)のこと
>

重ね重ねありがとうございます。

Dim FormChild1 As New Form2
FormChild1.MdiParent = Me
FormChild1.Show()

の「FormChild1.MdiParent = Me」の部分は
FormChild1(Form2)の親はMe(Form1)ですよと記述されていて

Dim MyForm1 As Form1
Dim MyForm3 As New Form3

MyForm3.MdiParent = Me.MdiParent
MyForm3.Show()
Me.Close()

の「MyForm3.MdiParent = Me.MdiParent」の部分は
MyForm3(Form3)の親はMe(Form2)のMdiParent(親・・・つまりForm1)ですよ
ということですね!

これはMDIうんぬんより基本的な部分をもっと勉強しなければいけませんね(ーー;)
どうもありがとうございました!
解決済み!

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