• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:[VB.NET]3つ以上のフォームを一つずつ表示し、最後のフォームを閉じた時に最初のフォーム以外のフォームを閉じる)

[VB.NET]3つ以上のフォームを一つずつ表示し、最後のフォームを閉じた時に最初のフォーム以外のフォームを閉じる

このQ&Aのポイント
  • VB.NETを使用して、3つ以上のフォームを順番に表示し、最後のフォームを閉じた際に最初のフォーム以外のフォームも閉じる方法について教えてください。
  • フォームの表示順序を制御するために、ボタンを使用して次のフォームを表示させます。一度表示されたフォームは隠されるようにします。
  • ただし、最後のフォームでボタンを押した際に、最初のフォーム以外のフォームも閉じて、最初のフォームを再表示する方法がわかりません。ご教授願います。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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でそのまま動くかは不明・・・。 なお、あくまで考え方のひとつなので、他にも方法はあります。

ak_kinoko
質問者

お礼

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

その他の回答 (1)

回答No.1

VB.NETの命令は詳しくないので概念だけ。 AからBを開くときはダイアログモードで開き、Bが閉じられたらBを削除。 BからCを開くときはダイアログモードで開き、Cが閉じられたらCを削除してBを閉じる。

ak_kinoko
質問者

お礼

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

関連するQ&A

専門家に質問してみよう