728x90
Winform의 구성
WinForms 프로젝트는 진입점(Program.cs) 과 폼 클래스(Form1) 로 시작한다.
Form1은 보통 파일이 분리(partial) 되어 관리된다.
- Program.cs : Main() 을 가진 프로그램 시작 파일 (entry point)
- Form1.cs : 개발자가 작성하는 로직/이벤트 코드 (partial)
- Form1.Designer.cs : 디자이너가 자동 생성하는 UI 초기화 코드 (partial)
Program.cs
- Main() 을 가진 프로그램 시작 파일이다.
- 앱 실행 시 가장 먼저 실행되어 초기 설정을 끝내고, 어떤 폼을 띄울지 결정한다.
- WinForms 앱이 종료되지 않고 계속 동작하도록 메시지 루프(입력 처리 루프) 를 시작한다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
static class Program
{
/// <summary>
/// 해당 응용 프로그램의 주 진입점입니다.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
Program.cs 코드 분석
Application.EnableVisualStyles()
- Windows의 비주얼 스타일(테마/모양) 을 컨트롤에 적용한다.
- 폼/컨트롤이 생성되기 전에 호출하는 것이 일반적이다.
- 기본 컨트롤을 현재 Windows 스타일로 표시하기 위해 실행된다.
Application.SetCompatibleTextRenderingDefault(false)
- 컨트롤의 기본 텍스트 렌더링 방식을 지정한다.
- false: GDI 기반 TextRenderer 사용(WinForms 기본 호환/일반 선택).
- true: GDI+ 기반 Graphics 사용(출력 특성/호환 목적일 때 선택).
Application.Run(new Form1())
- new Form1() 로 메인 폼 인스턴스를 만든다.
- 해당 폼을 표시하고 메시지 루프를 시작한다.
- 루프가 유지되는 동안 클릭/키입력/창 이벤트가 처리되고 앱이 계속 실행된다.
- 보통 메인 폼이 닫히면 루프가 끝나며 프로그램이 종료된다.
Form1.cs / Form1.Designer.cs
- WinForms에서 폼 1개를 만들면 보통 파일이 2개로 나뉜다.
- Form1.Designer.cs : 디자이너가 생성·관리하는 UI 초기화 코드 영역
- Form1.cs : 프로그래머가 작성하는 메시지 처리/이벤트/로직 코드 영역
- 두 파일은 partial class 로 이루어져 있으므로 결과적으로 컴파일 시 두 파일은 하나의 Form1 클래스로 합쳐진다.
Form1.Designer.cs
- 디자이너는 이 소스 코드를 해석해서 화면에 폼을 그려준다.
- 폼에 컨트롤을 배치/수정하면 이 파일 내용이 자동으로 바뀐다.
- 일반적으로 직접 수정하지 않는 편이 안전하다. (디자이너가 덮어쓸 수 있음)
namespace WindowsFormsApp1
{
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.ClientSize = new System.Drawing.Size(800, 450);
this.Text = "Form1";
}
#endregion
}
}
Form1.Designer.cs 코드 분석
InitializeComponent()
- 폼이 생성될 때 컨트롤/윈도우 상태를 초기화하는 메서드다.
- 디자이너에서 설정한 값(크기/제목/배치/컨트롤 생성 등)이 코드로 기록되어 여기서 실행된다.
- 폼 생성자에서 InitializeComponent()를 호출하면 디자이너가 만든 UI 상태가 그대로 적용된 폼이 만들어진다.
- 외부 호출을 막기 위해 private로 둔다.
this.components = new System.ComponentModel.Container();
- 디자이너가 생성한 컴포넌트를 담아 관리하는 컨테이너다.(예: Timer, ImageList 등)
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- 폰트 기준으로 자동 스케일링 방식을 설정한다.
this.ClientSize = new System.Drawing.Size(800, 450);
- 폼의 클라이언트 영역(내용 영역) 크기를 설정한다.
this.Text = "Form1";
- 창 제목(타이틀바 텍스트)을 설정한다.
Form1.cs
- Form1 폼 클래스의 사용자 코드 영역이다.
- 사용자 입력(클릭/키보드 등)으로 발생한 메시지에 대해 “어떻게 반응할지”를 여기에 구현한다.
- 폼 편집기에서 컨트롤을 더블클릭하면 이벤트 핸들러가 생성되고, 보통 Form1.cs에 작성된다.
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 WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}
Form1.cs 코드 분석
public Form1()
- 폼 객체가 생성될 때 실행되는 생성자다.
- InitializeComponent()를 호출해 디자이너에서 정의된 UI(컨트롤/속성/이벤트 연결)를 초기화한다.
- 기본적으로 생성자에는 InitializeComponent()만 존재한다.
- 초기값 세팅, 데이터 로딩 준비, 컨트롤 기본 상태 설정이 필요하면 추가로 작성한다.
public Form1()
{
InitializeComponent();
this.Text = "메인 화면";
button1.Enabled = false;
}'C#' 카테고리의 다른 글
| [C#/Winform] 윈폼 컨트롤 정리 (0) | 2025.12.24 |
|---|---|
| 시리얼 통신 프로그램 제작 (수정중) (0) | 2025.09.19 |
| 시리얼 통신 프로그램 분석/분해 (0) | 2025.09.19 |
| windows forms 프로젝트 템플릿 구조 (0) | 2025.09.15 |
| *현장 S/W 배운 부분 기록 (이후 하나씩 자세히 정리예정) (0) | 2025.09.04 |