티스토리 뷰

프로그래밍

MDI 응용 만들기 - VB.Net

야라바 2015. 8. 21. 11:37
728x90

여러개의 폼을 가진 다중 폼 응용의 또 다른 형태가 MDI(Multiple-Document Interface) 응용입니다. 대표적인 것이 비주얼스튜디오인데 하나의 메인 폼이 여러개의 자식 폼을 소유하는 형태로 관리합니다. 비주얼스튜디오 내부에 코드 편집창도 있고, 속성창, 솔루션 창과 디자인창도 소유하면서 이들 창의 배치와 관리를 통제하는 것과 같은 응용 프로그램을 MDI 응용이라 합니다.

MDI 응용 만들기는 그리 복잡하지 않습니다. 부모 역할을 할 폼의 IsMdiContainer 속성을 아래의 그림과 같이 True로 설정하면 나머지 자식 폼들은 부모 폼의 영역 내에서 Show(), Hide()로 보이거나 숨길 수 있습니다.


예제에서는 부모 폼이 로드되면서 자식 폼을 Show() 메소드로 보이는데 이때 자식 폼의 MdiParent 속성에 부모폼을 설정하는 작업을 해주어야 합니다. 물론 부모 폼의  IsMdiContainer 속성은 True로 설정되어 있어야 합니다.

Public Class Form1
    Public FormMax As Integer = 5
    Public Formcnt As Integer = 0
    Public Formary(FormMax) As Form2
    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Form2.MdiParent = Me
        Form2.Show()
    End Sub
End Class

위의 코드를 보면 "Me"라는 키워드를 사용했는데 이는 현재 클래스인 Form1을 지칭합니다. 자식 폼에는 버튼을 두개 두어서 [확인]을 누르면 자식 창을 추가하고 [취소]를 누르면 마지막으로 추가된 자식창을 닫도록 했습니다. 이를 위해서 폼을 저장할 배열과 현재 창의 개수를 저장할 변수를 Form1 클래스에 추가했습니다.


Public Class Form2
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        With Form1
            If .Formcnt < .FormMax Then
                .Formary(.Formcnt) = New Form2
                .Formary(.Formcnt).MdiParent = Form1
                .Formary(.Formcnt).Show()
                .Formcnt = .Formcnt + 1
            End If
        End With
    End Sub

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
        With Form1
            If .Formcnt > 0 Then
                .Formcnt = .Formcnt - 1
                .Formary(.Formcnt).Close()
            End If
        End With
    End Sub
End Class

위의 코드는 자식 폼의 코드로 폼을 생성하는 시점에 MdiParent 속성에 Me 대신 Form1을 직접 지정했습니다. 위의 코드에서 Me를 사용하면 Form2가 지정되기 때문입니다. With 키워드는 "End With" 사이의 블럭에서 코드를 간편하게 작성할 수 있도록 사용했습니다. Form1에 메소드를 만들어서 사용하는 것이 더 좋은 방법이지만 테스트 코드로 일단 MDI 맛보기를 해 보았습니다. 아래는 [확인] 버튼을 눌러 창을 여러개 띄운 상태입니다.



MDI 부모창 내부에 있는 자식 창들을 어떻게 배치할 것인지를 다루는 것을 레이아웃(Layout)이라 하는데 부모폼에서 MDI 레이아웃을 LayoutMdi 메소드를 통해서 간단하게 제어할 수 있습니다.  LayoutMdi 메소드의 파라미터로는 MdiLayout.Arrangelcons, MdiLayout.Cascade, MdiLayout.TileHorizontal, MdiLayout.TileVertical 등을 사용할 수 있습니다. 아래의 그림은 MdiLayout.TileHorizontal로 배열한 결과입니다.



통상 MDI 부모 폼에는 메뉴와 툴바가 배치되고 자식 폼은 그 나머지 영역을 통해서 메뉴등에 반응하는 형태로 동작하도록 만들어집니다.

728x90
댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함