|
分類:[VB.NET]
■No234に返信(かるあさんの記事) > Form1からForm2を呼び出す。 > Form2が開いていた場合はForm2を最前面にするような処理がしたいです。 > "Form2が開いている場合"という処理はどうすればよいのでしょう?
1.Form2のコンストラクタのアクセシビリティをPublicからPrivateに変更 Public Sub New() → Private Sub New()
2.Form2に下記のコードを追加 Protected Shared m_instance As Form2
Public Shared ReadOnly Property Instance() As Form2 Get If m_instance Is Nothing OrElse m_instance.IsDisposed Then m_instance = New Form2 End If Return m_instance End Get End Property
3.Form2の画面の状態に関わらず、下記で表示、または、アクティブにする。 Form2.Instance.Show() Form2.Instance.Activate()
というような方法はどうでしょうか?(いわゆるシングルトンパターン) 開けるForm2は唯一つでよければ、こういう方法があります。
あるいは、もっと素直なやり方としては、 Form2のインスタンスはForm1のクラス変数で保持しておいて、 Form2を表示した後、Form2を閉じるときは、 Closeで閉じるのではなく、Hideしておくだけにして、 一回目表示するときも、前面に持っていくだけのときも、 どちらの場合もShowしてActivateメソッドを呼び出せばOKです。
Form2自身で勝手にCloseされないようにしておけば、 開かれているか?という確認は不要ですよね。
|