- ベストアンサー
MDIホームにおいて子ホームから子ホームを制御
VB2008を使用している入門者です。 表題のことですが、MDI親ホームから子ホーム1を作ります。 その子ホーム1で次の子ホーム2をMDIのもとで開きたい。 単に、Showでも開けますが、子ホームとして開きたいのです。 現状は、子ホームにプロパティを設定して、子ホーム1から子ホーム2が1回は開けますが、一旦、クローズしますと2回目はダメです。 2回目以降は、親ホームからは、可能ですが、子ホーム1のコントロールで子ホーム2を表示できないものでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
2回目以降のフォームの表示は初期化された状態でいいのでしょうか? 'プロパティの設定 Public Property frmMDI_3() As Form3 Get Return frmMDI3 End Get Set(ByVal Value As Form3) If Not Value Is Nothing Then frmMDI3 = Value frmMDI3.MdiParent = Me.MdiParent End If End Set End Property Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' 破棄されてしまったどうかのチェック if frmMDI3.IsDisposed then frmMDI_3 = new Form3 end if frmMDI3.Show() End Sub End Class といった具合でいいともいます VB6のころは グローバルなオブジェクトとしてFormが存在しました VB.NETになってそのあたりに改変があったので破棄されたオブジェクトに対して Showメソッドを実行しても表示されなくなっています
その他の回答 (1)
- redfox63
- ベストアンサー率71% (1325/1856)
その現象の確認できる必要最低限のコードを提示できませんか? > 子ホームにプロパティを設定して、子ホーム1から > 子ホーム2が1回は開けますが、一旦、クローズしますと > 2回目はダメです の部分をソースで明示しましょう この『ダメです』というのは エラーが出るのかエラー表示などは無く何も動作していないように見えるのか などを具体的に説明してみましょう
お礼
VB6では、子ホームから次の子ホームが簡単に何度も表示できていた記憶があります。 VB2008でも独立した子ホームは、今でも表示できていますが、MDIホーム内ではできなくて困っています。 現状は、MDIホームにMenuStripを作り、そこから子ホームを表示させています。
補足
お返事遅れて申し訳ありません。簡単に以下にコードを書きます。 Form2からForm3は、1回は表示しますが、2回目からは表示できません。Form2からForm3を何度も消したり表示したいのです。 Public Class Form1 Inherits System.Windows.Forms.Form Private frm2 As Form2 Private frm3 As Form3 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.IsMdiContainer = True frm2 = New Form2() frm3 = New Form3() '各フォームのプロパティで登録 frm2.frmMDI_3 = frm3 frm3.frmMDI_2 = frm2 frm2.MdiParent = Me frm3.MdiParent = Me frm2.Show() End Sub End Class Public Class Form2 Inherits System.Windows.Forms.Form Private frmMDI3 As Form3 'プロパティの設定 Public Property frmMDI_3() As Form3 Get Return frmMDI3 End Get Set(ByVal Value As Form3) If Not Value Is Nothing Then frmMDI3 = Value End If End Set End Property Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click frmMDI3.Show() End Sub End Class Public Class Form3 Inherits System.Windows.Forms.Form Private frmMDI2 As Form2 'プロパティの設定 Public Property frmMDI_2() As Form2 Get Return frmMDI2 End Get Set(ByVal Value As Form2) If Not Value Is Nothing Then frmMDI2 = Value End If End Set End Property End Class
お礼
感謝!感謝! 有難うございました。 完璧です。破棄されたオブジェクトを再実行しようとしていたようです。本屋さんでVBの教書をあたりましたが、適切なものがなく、こちらで質問しても長らく回答もなくあきらめかけていたとこところでした。 本当に有難うございました。