티스토리 뷰



윈도우 폼으로 화면 기반의 프로그램을 작성하면 System.Windows.Forms 클래스를 상속받아 클래스를 작성하게 됩니다. Forms 클래스의 연관 속성과 메서드, 이벤트는 MSDN 페이지에서 자세하게 확인할 수 있습니다. 페이지의 링크는 https://msdn.microsoft.com/ko-kr/library/system.windows.forms.form(v=vs.100).aspx입니다. 아래의 그림은 Forms 클래스의 속성과 메서드, 이벤트를 마인드맵으로 나타낸 것입니다. 속성을 적절하게 설정하여 제목, 창의 위치나 크기등을 조정하고 메서드 호출을 통해서 원하는 동작을 지시할 수 있으며 다양한 이벤트에 대응하는 적절한 이벤트 처리 루틴을 기술할 수 있습니다.  

닷넷 환경에서 VB 또는 C#으로 프로그래밍을 할 때는 MSDN의 매뉴얼 페이지와 비주얼스튜디오에서 제공하는 인텔리센스를 잘 활용할 필요가 있습니다. 자주 사용하는 속성이나 메서드, 이벤트는 금방 외워지겠지만 모든 것을 외우고 있을 필요는 없으니까요. 자주 사용하는 것을 몇가지 다루어 볼까 합니다.


■ 윈도우 폼의 속성

윈도우 폼의 속성은 뭐니 뭔니해도 디자인 소스 파일(*.Designer.vb)의 각 오브젝트를 생성하는 과정을 보면 자주 사용하는 속성도 확인할 수 있습니다. 아래는 폼에 버튼과 레이블을 추가한 상태의 디자인 소스 파일 일부입니다.

Private Sub InitializeComponent()
        Me.Button1 = New System.Windows.Forms.Button()
        Me.Label1 = New System.Windows.Forms.Label()
        Me.SuspendLayout()
        '
        'Button1
        '
        Me.Button1.Location = New System.Drawing.Point(84, 38)
        Me.Button1.Name = "Button1"
        Me.Button1.Size = New System.Drawing.Size(75, 23)
        Me.Button1.TabIndex = 0
        Me.Button1.Text = "Button1"
        Me.Button1.UseVisualStyleBackColor = True
        '
        'Label1
        '
        Me.Label1.AutoSize = True
        Me.Label1.Location = New System.Drawing.Point(82, 107)
        Me.Label1.Name = "Label1"
        Me.Label1.Size = New System.Drawing.Size(42, 12)
        Me.Label1.TabIndex = 1
        Me.Label1.Text = "Label1"
        '
        'Form1
        '
        Me.AutoScaleDimensions = New System.Drawing.SizeF(7.0!, 12.0!)
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        Me.ClientSize = New System.Drawing.Size(249, 185)
        Me.Controls.Add(Me.Label1)
        Me.Controls.Add(Me.Button1)
        Me.Name = "Form1"
        Me.Text = "Form1"
        Me.ResumeLayout(False)
        Me.PerformLayout()
End Sub

오브젝트의 위치를 나타내는 .Location오브젝트에 접근할때 사용할 오브젝트의 이름인 .Name오브젝트의 크기를 나타내는 .Size, 버튼이나 레이블의 표시 내용을 가지고 있는 .Text등이 대표적이라 하겠습니다. 이런 속성들은 위의 코드처럼 값을 대입할 수도 있고 값을 확인하기 위해 참조할 수도 있습니다. 코드에 있는 Me라는 키워드는 현재 코드가 속한 오브젝트를 의미하는 것으로 Me.Name에 "Form1" 문장을 통해서도 확인할 수 있습니다. 위의 코드를 보면 Form1이라는 오브젝트 속에 버튼이나 레이블 오브젝트가 속해 있는 구조를 확인할 수 있습니다.

  • StartPosition : 창의 시작 위치와 크기를 지정합니다.
    Manual(Location, Size 속성으로 위치/크기 결정), CenterScreen(화면 가운데 위치, Size 속성으로 크기 결정), WindowsDefaultLocation(Windows 기본 위치, Size 속성으로 크기 결정), WindowsDefaultBounds((Windows 기본 위치 및 크기 적용), CenterParent(부모 폼의 가운데 위치)
  • Size, Location : 창이나 오브젝트의 크기와 위치는 각 오브젝트가 속한 부모의 영역 좌측 상단을 0,0으로 하여 크기 및 위치를 지정합니다. 위의 디자인 코드 예제에서도 확인 할 수 있듯이 System.Drawing.Point()로 위치를 지정하고 System.Drawing.Size()로 크기를 지정할 수 있습니다. 크기와 위치 값을 읽을 때는 *.Size.Width, *.Size.Height, *.Location.X, *.Location.Y로 읽을 수 있습니다.
  • Visible : True면 보임, False면 숨김을 나타냅니다.
  • ControlBox : 폼 우측 상단에 최대화-최소화-닫기 시스템 아이콘을 보일지 여부 지정. True 보임, False 숨김
  • FormBorderStyle : 폼의 테두리 스타일을 지정하는 것으로 테두리 스타일은 테두리 모양 뿐만아니라 창 크기를 조정할 수 있게 할지 등을 결정하는 요소입니다. None(테두리 없음), FixedSingle(고정 단일 선), Fixed3D(고정 3차원), FixedDialog(고정 대화 상자 스타일), Sizable(크기 조정 가능), FixedToolWindow(고정 도구창), SizableToolWindow(크기 조정 가능 도구창) 도구창으로 설정하면 Alt+Tab의 작업 표시줄에서 제외됩니다.
  • TabStop, TabIndex : 윈도우 폼에 여러개의 컨트롤이 있을 때 컨트롤 간의 이동을 키보드를 통해서도 할 수 있도록 하려면 TabStop을 True로 설정하면 됩니다. TabStop을 True로 설정하면 [Tab]키 또는 [Shift+Tab]키를 눌러서 이동할 수 있는 컨트롤로 설정하는 것이고 False로 하면 키보드로는 해당 컨트롤을 선택할 수 없습니다. [Tab]키를 누를때 위에서 아래로, 좌에서 우로 위치에 따라 자동으로 이동하는 것이 아니라 TabIndex 속성에 기록되어 있는 값에 따라 값이 작은 순서를 먼저 방문합니다. 0이 첫 컨트롤 위치가 됩니다.
  • WindowState : 창의 상태를 지정하는 속성으로 Normal(기본 크기), Minimized(최소화된 창), Maximized(최대화된 창)로 설정할 수 있습니다.
  • TransparencyKey, BackColorTransparencyKey는 폼에 투명 배경을 적용할 경우에 투명으로 간주할 색상을 설정합니다. 예를 들어 TransparencyKey에 Color.White를 설정하면 BackColor(배경색) 속성이 Color.White인 컨트롤들은 배경을 투명하게 처리합니다.
  • TopLevel, TopMost : TopLevel을 True로 설정하면 부모창이 없는 최 상위 창으로 만든다는 의미이고 통상 응용 프로그램의 메인 창으로 사용합니다. TopMost를 True로 하면 활성, 비활성에 관계없이 항상 맨 위에 떠있는 창으로 만듭니다(찾기/바꾸기 창과 같은)
  • AcceptButton, CancelButton : 폼에 여러 버튼이 있을 때 엔터키(Enter)를 눌렀을 때 반응할 버튼과 ESC키를 눌렀을 때 반응할 버튼을 지정합니다. Enter키와 ESC키를 누르면 지정한 버튼이 눌러진 것과 같은 효과를 냅니다.


■ 윈도우 폼의 메서드

클래스의 메서드는 함수를 사용하는 것처럼 사용할 수 있습니다. 메서드로 특정 동작을 수행하지만 결과적으로는 폼의 속성을 다루게 되는 경우도 있습니다.

  • SetDesktopBounds(x, y, 폭, 깊이) : 이나 오브젝트의 위치와 크기를 한번에 설정할 수 있습니다.
  • Show(), Hide() : 보이기, 숨기기 수행
  • Activate(), Close() : 폼을 활성화하고 포커스를 부여하거나, 폼을 닫습니다.


■ 윈도우 폼의 이벤트

VB에서 자동으로 만들어주는 이벤트 처리 루틴은 통상 "폼이나 오브젝트의 이름_이벤트명"으로 만들어 집니다. 폼의 이름이 Form1이라면 Form1_Load 와 같은 형태의 이벤트 처리 루틴이 만들어 집니다. 또한 각 이벤트 처리 루틴은 "ByVal sender As Object, ByVal e As System.EventArgs" 이벤트를 보낸 주체와(sender) 이벤트 정보(e)를 파라미터로 넘겨 줍니다.
  • Load, Closed, Closing : 폼이 출력되기전 로드될 때 Load 이벤트가 발생하고, 폼이 닫힌 다음에 Closed, 닫힐 때는 Closing이 전달되므로 저장하지 않은 내용을 검사해서 폼이 닫히지 않게 하려면 Closing 이벤트 처리 루틴에서 e.Cancel 속성을 True로 설정하면 폼을 닫지 않습니다. 
  • ResizeBegin, Resize, SizeChanged, ResizeEnd : 폼의 크기를 변경하면 크기 조정을 시작하는 ResizeBegin이 오고, 종료까지 N회의 Resize-SizeChanged 이벤트가 오고 맨 마지막으로 ResizeEnd가 옵니다.



댓글
댓글쓰기 폼