본 소스는 개인적으로 공부하며 터득한 방법으로 더 좋은 방법이 있을 수 있음을 인지해주시기 바랍니다.
더 좋은 방법이 있다면 댓글에 남겨주시면 감사하겠습니다.
비주얼베이직에서 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