티스토리 뷰

728x90

통상 하나의 윈도우 폼 응용 프로그램은 여러개의 창(폼, Form)으로 구성합니다. 기능별로 별도의 폼을 만들어 필요에 따라 적절한 폼을 동작시키는 다중 폼 형태로 운영하는 것이 일반적입니다. 단일 폼 응용에서 폼을 추가 하려면 프로젝트의 팝업 메뉴에서 추가>Windows Form을 선택합니다.



추가>새 항목에서 여러 템플릿 중에 윈도우 폼을 선택해도 됩니다. 새롭게 추가할 폼의 이름을 확인하고 [추가] 버튼을 누릅니다.


추가한 폼에는 간단하게 문자열을 받을 수 있는 텍스트박스 컨트롤 하나와 입력 확인을 받을 버튼을 추가합니다. 또한 폼의 TopMost 속성을 True로 설정하여 이 폼이 보여질때 폼이 여러개 겹치더라도 최상단에 표시될 수 있도록 합니다. 창이 여러개 겹칠때 보여지는 순서를 Z 순서라 하는데 TopMost 속성을 True로 설정하면 맨 앞에 창이 보여지도록 합니다. Z 순서를 뒤로, 앞으로 조정할 수도 있으며 Form클래스의 SendToBack() 메소드를 사용하면 뒤로 보내고 BringToFront() 메소드를 사용하면 앞으로 가져올 수 있습니다.


두번째 폼의 버튼 이벤트에는 아래의 코드처럼 첫번째 폼의 레이블에 입력 문자열을 전달하고 자신을 숨기도록 합니다.

Public Class Form2
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Form1.Label1.Text = TextBox1.Text
        Hide()
    End Sub
End Class

위의 코드 예제에서도 확인 할 수 있듯이 "폼이름.컨트롤이름.속성"과 같은 방식으로 서로 다른 폼의 내부 컨트롤을 가져올 수도 있고 다른 폼의 컨트롤의 값을 수정할 수도 있습니다.

Public Class Form1
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Form2.Show()
    End Sub
End Class

위의 소스 코드는 첫번째 폼의 코드로 버튼을 클릭하면 Show() 메소드로 두번째 폼을 보이게 합니다. 폼을 여러개 생성했더라도 시작폼만 보여지고 나머지 폼은 숨겨진 상태로 프로그램을 시작합니다. 개발자는 용도에 따라 특정 폼을 보이기/숨기기 하는 방식으로 관리할 수 있고 시작 폼이 닫히면 프로그램도 종료되므로 특정 폼에서 프로그램을 종료하고 싶으면 첫번째폼에 대해서 Close() 메소드를 호출하여 첫번째 폼을 닫으면 됩니다. 시작 폼을 변경하려면 아래의 그림과 같이 프로젝트 속성>응용 프로그램 탭에서 "시작 폼" 항목을 수정할 수 있습니다.


■ 딸림창(Owned Forms)

다중 폼 응용에서 각 폼은 기본적으로 독립적으로 동작합니다. 한 창을 이동시키거나 크기를 변경한다고 다른 창이 영향 받는 것은 아니라는 것입니다. 창을 닫거나 최소화(Minimize) 시키는 경우에는 다른 창에 영향을 주지 않습니다. 그런데 폼을 특정폼의 딸림창(Owned Form)으로 설정하면 특정폼을 최소화시키거나 닫을때 딸림창 들도 함께 닫거나 최소화시킬 수 있습니다. 특정폼이 최소화 상태에서 원래 크기로 돌아오면 딸림창들도 같이 복원됩니다.

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        AddOwnedForm(Form2)
    End Sub

딸림창으로 설정하더라도 창크기 최소화 및 복원, 닫기 외에 다른 동작들은 각각 독립적으로 운용됩니다. 위의 코드는 특정폼이 로드될 때 딸림창을 추가하는 로직으로 AddOwnedForm 메소드로 딸림창을 추가할 수 있습니다.


■ 대화창(Dialogs)

다중 폼 응용에 포함된 각 폼이 독립적으로 동작한다는 점은 이미 앞에서 언급했습니다. 그런데 폼들 간에 독립적으로 동작하는 것이 아니라 시스템 메시지 박스/입력박스 사용하기에서 언급한 여러가지 시스템 대화창처럼 창이 닫히기까지 해당 창을 호출한 폼은 실행을 대기하고 호출한 대화창으로부터 사용자의 반응과 데이터를 리턴 받는 "대화창" 또한 윈도우 폼을 통해서 제작할 수 있습니다. 

일반적인 폼을 호출할 경우에는 Form2.Show()의 형태로 수행했지만 대화창을 띄울 때는 Form2.ShowDialog()의 형태로 ShowDialog() 메소드를 사용합니다. ShowDialog()는 DialogResult 열거형의 결과를 리턴해서 사용가 OK버튼을 눌렀는지 취소했는지등의 확인할 수 있습니다. 결과는 DialogResult.OK, DialogResult.Cancel, DialogResult.Abort, DialogResult.Retry, DialogResult.Ignore, DialogResult.Yes, DialogResult.No, DialogResult.None 으로 전달받을 수 있습니다.

호출되는 사용자 대화창을 만들 때는 폼에서 아래와 같은 속성들을 조정해줄 필요가 있습니다.

  • ControlBox 속성을 False로 설정해서 최소화, 창닫기등을 방지 합니다.
  • FormBorderStyle 속성을 FixedDialog로 설정해서 창 경계선으로 크기 변경을 하지 않도록 합니다.
  • ShowInTaskbar 속성을 False로 설정해서 불필요한 아이콘 표시를 방지합니다.
  • AcceptButton 속성에 [확인] 버튼으로 간주할 버튼을 선택합니다. 사용자가 엔터키를 치면 확인 버튼이 눌러진것으로 처리합니다.
  • CancelButton 속성에 [취소] 버튼으로 간주할 버튼을 선택합니다. 사용자가 ESC키를 치면 취소 버튼이 눌러진것으로 처리합니다.
대화창으로 사용할 폼 내부에 추가한 버튼들에 대해서 아래의 그림과 같이 DialogResult 속성에 대화창을 닫으면서 결과로 전달할 값을 선택합니다.


대화창 버튼의 클릭 이벤트 처리 루틴에서는 Close() 처리만 하면되고 해당 버튼에 설정된 DialogResult 값이 호출한 곳으로 리턴 됩니다. 호출한 곳에서는 대화창 내의 개별 컨트롤을 아래의 코드처럼 직접 다룰 수 있습니다.
Public Class Form1
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        If Form2.ShowDialog() = Windows.Forms.DialogResult.OK Then
            Label1.Text = Form2.TextBox1.Text
        End If
    End Sub
End Class
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
글 보관함