본문 바로가기

Developer/VB.net

[VB.net] ToolStripMenuItem 에서 Child windows 띄우기

본 소스는 개인적으로 공부하며 터득한 방법으로 더 좋은 방법이 있을 수 있음을 인지해주시기 바랍니다.
더 좋은 방법이 있다면 댓글에 남겨주시면 감사하겠습니다.

 

비주얼베이직에서 MDI Form 에서 Child윈도우를 다중으로 띄우려하다보니 문제가 발생..
 - 객체를 계속 생성하였을시 중복 윈도우 폼 작성
 - 객체를 조건에 의해서 파기시켰을 경우 다시 호출 시 폼자체가 Null 값이 되어버리는 경우
 - 등등등...

Source

MDI Form
1. Global Variable 에 Child 폼 객체 생성..
Dim mChildForm
 
2. ToolStripMenuItem 클릭시 발생하는 이벤트 작성
Private Sub mChildForm_ToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

Handles mChildForm_ToolStripMenuItem.Click
        If destoryChild(mChildForm) Then '폼의 존재여부 파악하기
            Exit Sub
        End If

        mChildForm = New SetDefultSuDang() '존재하는 폼이 없을 경우 폼을 재 생성한다

        mChildForm.MdiParent = Me '차일드폼에 나야나 아빠폼이라 알려주기.
        mChildForm.Show() '차일드폼 보여주기
        mChildForm.Focus() '차일드폼 포커스~
    End Sub


 

3. ChildForm의 생존여부 파악하여 기존의 폼을 띄우거나 사망했거나, 태어나지 않음을 전달
 Private Function destoryChild(ByVal ChildForm) As Boolean
        Try
            If ChildForm.IsDisposed Then '폼이존재하지않으면
                destoryChild = False
            Else                                    '폼이 존재한다면
                'ChildForm.Close()
                ChildForm.MdiParent = Me
                ChildForm.Show()
                ChildForm.Focus()
                dstoryChild = True
           End If
        Catch ex As NullReferenceException
            'Finally
            destoryChild = False
        End Try
       
    End Function