VB2010でソフトを作っております。
MDI親フォームから子フォームを表示させたいのですが…。
過去に少しだけVB6を使っていたことがありますが、クラスという概念に苦労しております
インスタンスや初期化といったところをうまく扱えばとは思うのですが、よろしくご指導お願いいたします。
1.MDI親フォーム(Form1)のボタンを押し、子フォーム(Form2)を表示させる
2.子フォームが表示されていなかったら表示させる
3.子フォームが表示されていたら何もしない
これだけの事ですがずいぶん悩んでおります。
全コードがこれです。
Public Class Form1
Private f2 As New Form2
Private Sub Form1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.IsMdiContainer = True
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim fChild As Form() = Me.MdiChildren
For Each f As Form In fChild
If f.Text = "Form2" Then
Exit Sub
End If
Next
f2 = New Form2
f2.MdiParent = Me
f2.Show()
f2.Activate()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If f2 Is Nothing OrElse f2.IsDisposed Then
f2 = New Form2
f2.MdiParent = Me
End If
f2.Show()
f2.Activate()
End Sub
End Class
ボタン1でもボタン2でも、期待する動作はするのですが、
ボタン1ではアクティブになっているフォームの名前を力技で取得している気がして…
ボタン2では子フォーム(Form2)をすでに表示している状態でもさらにShowをしているのが気に入らなくて…
もっとスマートな方法がありましたら、ご指導お願いします。
Private f2 As New Form2
を
Private f2 As Form2
にして
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If f2 Is Nothing OrElse f2.IsDisposed Then
f2 = New Form2
f2.MdiParent = Me
f2.Show()
End If
f2.Activate()
End Sub
としてみては?
質問者
お礼
ありがとうございます!おかげさまでできました!
ひとつ、自分の間違いを見つけてしまいました。
If f2 Is Nothing OrElse f2.IsDisposed Then
を
If Form2 Is Nothing OrElse Form2.IsDisposed Then
と書いてしまいました。
クラス名とインスタンス名?を紛らわしい物にしてしまったのが原因のひとつでした。
コンパイルが通ってしまったので見つけるまでに時間がかかったことも私のミスです。
お礼が遅くなりまして申し訳ありませんでした。
お礼
ありがとうございます!おかげさまでできました! ひとつ、自分の間違いを見つけてしまいました。 If f2 Is Nothing OrElse f2.IsDisposed Then を If Form2 Is Nothing OrElse Form2.IsDisposed Then と書いてしまいました。 クラス名とインスタンス名?を紛らわしい物にしてしまったのが原因のひとつでした。 コンパイルが通ってしまったので見つけるまでに時間がかかったことも私のミスです。 お礼が遅くなりまして申し訳ありませんでした。