폼(Form)?


폼이란 겉으로 드러나는 형태, 즉 사용자가 보게 되는 틀을 말한다. 
컴퓨터에서의 폼이라 하면 우리가 컴퓨터를 이용하며 흔히 접하게 되는 창들(ex | 메모장이나 윈도우 탐색기, 프로그램을 실행할 때 뜨는 창 등)을 통틀어 폼이라고 볼 수 있다. 윈도우 폼은 윈도우 운영체제에서 쓰이는 윈도우 API를 이용한 폼이라고 볼 수 있다.

윈도우 폼은 사용자가 직접적으로 보게되는 인터페이스이기에 사용자가 이용하기 편리하도록 실용적이고 멋있게 디자인 될 필요가 있을 것이다. 하지만 거기에서 끝나면 그냥 껍데기만 만들어진 것에 그친다. 그렇기에 각 부분에 컨트롤을 추가하여 이벤트가 발생할 시 처리할 수 있도록 만들어주면 윈폼 애플리케이션이 되는 것이다.

아래는 Visual Studio 2013을 이용해 간단한 윈폼 애플리케이션을 생성시켜 보는 과정이다.


위의 1 -> 2 -> 3 순으로 새 프로젝트를 생성시키면 아래와 같이 가장 기본적인 윈폼이 만들어진다.


옆의 솔루션 탐색기의 목록을 보면 Form1.cs 클래스 아래에 Designer와 Form1 총 2개의 클래스가 있는걸 볼 수 있다.

이는 코딩의 편의를 위해 Form1클래스를 partial을 이용해 부분클래스로 나눴기 때문인데 둘 중 개발자가 주로 다루게 될 부분은 Form1의 내용이다. Designer에는 폼의 디자인 및 속성과 관련한 코드가 들어가는데 이 코드는 개발자가 직접 추가할 수도 있지만 도구상자나 속성창을 이용해 변경하는 값들이 자동으로 추가되기 때문에 미세한 조정 이외에는 굳이 손댈일이 적기 때문이다.


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
31
32
33
34
35
36
37
38
39
40
namespace WindowsFormsApplication17
{
    partial class Form1
    {
        /// <summary>
        /// 필수 디자이너 변수입니다.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
 
        /// <summary>
        /// 사용 중인 모든 리소스를 정리합니다.
        /// </summary>
        /// <param name="disposing">관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
 
        #region Windows Form 디자이너에서 생성한 코드
 
        /// <summary>
        /// 디자이너 지원에 필요한 메서드입니다.
        /// 이 메서드의 내용을 코드 편집기로 수정하지 마십시오.
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.Text = "Form1";
        }
 
        #endregion
    }
}
 
 
cs

<기본적으로 만들어지는 Designer의 내용>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApplication17
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
    }
}
 
cs

<기본적으로 만들어지는 Form1의 내용>


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApplication17
{
    static class Program
    {
        /// <summary>
        /// 해당 응용 프로그램의 주 진입점입니다.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}
 
cs

<기본적으로 만들어지는 Program.cs의 내용>


위 3개가 각 클래스 3개에 자동으로 생성되는 코드다. 

코드를 보면 Program.cs에 응용 프로그램의 시작점인 Main메소드가 있다. Application 클래스의 Run메소드에 윈도우 폼 클래스의 인스턴스를 매개변수로 넘겨주어 호출하면 Main스레드에서 윈도우 메시지 루프를 시작하고 지정된 폼을 보여주게 된다.


Form1클래스 안에 public Form1(){}은 생성자의 역할을 한다. 클래스가 생성될 때 자동으로 실행되는 부분인데 안에 보면 InitializeComponent();가 추가되어 있다. 이는 Designer 클래스에서 찾아볼 수 있는데 폼의 디자인이나 컨트롤 정의들이 모두 이 안에 정의되어 생성된다. 말하자면 폼의 디자인, 컨트롤 등을 초기화 해주는 작업이라 볼 수 있다.


폼의 디자인은 도구상자에 등록되어 있는 각 객체(도구들은 모두 클래스로 만들어져 있다.)들을 드래그 앤 드롭으로 쉽게 디자인 할 수 있게 만들어져 있지만 좀더 세세한 내부 과정을 보고 싶으면 드래그 앤 드롭으로 만들 시 Designer 클래스에 자동으로 추가되는 내용들의 변화를 살펴보며 해보면 도움이 될 듯 하다.


<오른쪽 Form1.cs[디자인]의 폼을 클릭 후 도구 상자를 열면 여러 도구가 나타난다>


반응형

+ Recent posts