dポイントプレゼントキャンペーン実施中!

VB.NETを学んでいるのですが、現在3つ以上のフォームを表示していくものを作ろうとして躓いたことがあったのでこちらに書き込みました。
内容としては、ボタンを押して次のフォームを表示していくものです。

動作の流れは以下のように考えています(フォームはA、B、Cの3つとする)
1.Aを表示
2.Aでボタンを押してBを表示し、Aは隠す
3.Bでボタンを押してCを表示し、Bは隠す
4.Cでボタンを押してBとCを閉じ、隠していたAを表示

隠すのはHideを用いてできたのですが、4.でCのボタンでBとCを一緒に閉じてAを表示させる方法がわかりませんでした。

1~4のように動作させるにはどうすればいいか教えてください

A 回答 (2件)

まとめて考えるのではなく、分けて考えた方がコーディングもしやすくなります。



[ FormA の処理 ]
1. ボタンを押したら FormB を開き、自身を Hide する。
2. FormB が閉じられたら、自身を Show する。

[ FormB の処理 ]
3. ボタンを押したら FormC を開き、自身を Hide する。
4. FormC が閉じられたら、自身を Close する。

[ FormC の処理 ]
5. ボタンを押したら、自身を Close する。

ポイントは、親フォーム側で子フォームのFormCloseを捕らえるところです。FormBからFormAを、とか、FormCからFormAとFormBを・・・と考えるとややこしくなります。上記のように処理すれば、FormBはFormAの動作を気にする必要はありませんし、FormCもFormBやFormAの動作を気にする必要はありません。子フォームのFormCloseはWithEvents宣言すれば捕らえられます。

以下、簡単なコードを。ボタン配置が面倒だったので、フォームのクリックで動作します。


' [ FormA の処理 ]
Public Class FormA
Inherits Form

Public Sub New()
Me.Text = "FormA"
End Sub

Private WithEvents frmFormB As FormB

' 1. ボタンを押したら FormB を開き、自身を Hide する。
Private Sub FormA_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
frmFormB = New FormB
frmFormB.Text = "FormB"
frmFormB.Show()

Me.Hide()
End Sub

' 2. FormB が閉じられたら、自身を Show する。
Private Sub frmFormB_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles frmFormB.FormClosed
frmFormB = Nothing
Me.Show()
End Sub

End Class

' [ FormB の処理 ]
Public Class FormB
Inherits Form

Private WithEvents frmFormC As FormC

' 3. ボタンを押したら FormC を開き、自身を Hide する。
Private Sub FormB_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
frmFormC = New FormC
frmFormC.Text = "FormC"
frmFormC.Show()

Me.Hide()
End Sub

' 4. FormC が閉じられたら、自身を Close する。
Private Sub frmFormC_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles frmFormC.FormClosed
frmFormC = Nothing
Me.Close()
End Sub

End Class

' [ FormC の処理 ]
Public Class FormC
Inherits Form

' 5. ボタンを押したら、自身を Close する。
Private Sub FormC_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
Me.Close()
End Sub

End Class

※VB2005で書いたコードなので.NETでそのまま動くかは不明・・・。

なお、あくまで考え方のひとつなので、他にも方法はあります。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます
開発用のPCが手元に戻り次第その方法でやってみようと思います

お礼日時:2009/08/01 14:32

VB.NETの命令は詳しくないので概念だけ。


AからBを開くときはダイアログモードで開き、Bが閉じられたらBを削除。
BからCを開くときはダイアログモードで開き、Cが閉じられたらCを削除してBを閉じる。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます
その考え方で作ってみようと思います

お礼日時:2009/08/01 14:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!