티스토리 뷰
여러개의 폼을 가진 다중 폼 응용의 또 다른 형태가 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 부모 폼에는 메뉴와 툴바가 배치되고 자식 폼은 그 나머지 영역을 통해서 메뉴등에 반응하는 형태로 동작하도록 만들어집니다.
'프로그래밍' 카테고리의 다른 글
가상의 키보드 입력 만들기 - VB.Net (0) | 2015.08.21 |
---|---|
윈도우 폼의 마우스/키보드 다루기 (0) | 2015.08.21 |
다중 폼(Form) 다루기 - VB.Net (0) | 2015.08.20 |
사각틀이 아닌 윈도우 폼 응용 만들기 (0) | 2015.08.19 |
VB 실행중 컨트롤 추가하기 (0) | 2015.08.18 |