728x90
1. 강의 개요
이번 강의에서는 SplitContainer 컨트롤을 사용하여 가변적인 레이아웃을 구성하는 방법을 학습합니다.
SplitContainer는 두 개의 패널을 분리하는 막대(Splitter)를 제공하며, 사용자가 패널 크기를 드래그하여 조정할 수 있습니다.
2. 학습 목표
- SplitContainer를 사용해 가변적인 레이아웃 구현.
- Orientation 속성을 활용해 수평 또는 수직 분할 구성.
- Splitter를 드래그해 패널 크기를 조정하는 기능 테스트.
3. SplitContainer란?
SplitContainer는 두 개의 패널을 포함한 컨트롤로, 패널 사이에 Splitter(분리 막대)를 제공하여 크기를 동적으로 조정할 수 있도록 합니다.
- 패널 1: 왼쪽(또는 상단) 패널.
- 패널 2: 오른쪽(또는 하단) 패널.
- Splitter를 드래그하여 두 패널의 크기를 조정할 수 있음.
SplitContainer 주요 속성
속성 설명 예제
Orientation | 패널 분할 방향 (수직/수평) | splitContainer1.Orientation = Orientation.Horizontal; |
SplitterDistance | Splitter의 초기 위치 | splitContainer1.SplitterDistance = 150; |
FixedPanel | 크기를 고정할 패널 | splitContainer1.FixedPanel = FixedPanel.Panel1; |
IsSplitterFixed | Splitter 고정 여부 | splitContainer1.IsSplitterFixed = true; |
4. 실습: SplitContainer를 사용한 가변 레이아웃 구성
요구사항
- SplitContainer를 수평 방향으로 설정하여 두 패널로 나눔.
- 각 패널에 Label과 TextBox 추가.
- Splitter를 드래그하여 패널 크기를 조정.
폼 구성
컨트롤 타입 이름 텍스트 위치 크기
SplitContainer | splitContainer1 | (없음) | 폼 중앙 | (400 x 300) |
Label (Panel1) | lblPanel1 | "상단 패널" | Panel1 내부 | (10, 10) |
TextBox (Panel2) | txtPanel2 | (없음) | Panel2 내부 | (10, 10) |
코드 작성
Form1.cs
using System;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
InitializeSplitContainer();
}
private void InitializeSplitContainer()
{
// SplitContainer 설정
splitContainer1.Orientation = Orientation.Horizontal; // 수평 분할
splitContainer1.Dock = DockStyle.Fill;
splitContainer1.SplitterDistance = 150; // 초기 분할 위치
// Panel1 구성
Label lblPanel1 = new Label
{
Text = "상단 패널",
Location = new System.Drawing.Point(10, 10),
AutoSize = true
};
splitContainer1.Panel1.Controls.Add(lblPanel1);
// Panel2 구성
TextBox txtPanel2 = new TextBox
{
Location = new System.Drawing.Point(10, 10),
Width = splitContainer1.Panel2.ClientSize.Width - 20,
Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right // 패널 크기 변화에 따라 크기 조정
};
splitContainer1.Panel2.Controls.Add(txtPanel2);
}
}
}
Form1.Designer.cs
namespace WindowsFormsApp1
{
partial class Form1
{
private System.ComponentModel.IContainer components = null;
private SplitContainer splitContainer1;
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.splitContainer1 = new SplitContainer();
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit();
this.splitContainer1.SuspendLayout();
this.SuspendLayout();
// splitContainer1
this.splitContainer1.Dock = DockStyle.Fill;
this.splitContainer1.Location = new System.Drawing.Point(0, 0);
this.splitContainer1.Name = "splitContainer1";
this.splitContainer1.Size = new System.Drawing.Size(400, 300);
this.splitContainer1.SplitterDistance = 150;
this.splitContainer1.TabIndex = 0;
// Form1
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(400, 300);
this.Controls.Add(this.splitContainer1);
this.Name = "Form1";
this.Text = "SplitContainer 예제";
((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit();
this.splitContainer1.ResumeLayout(false);
this.ResumeLayout(false);
}
}
}
5. 실행 결과
- 초기 상태
- SplitContainer가 수평 방향으로 분리되어 Panel1(상단)과 Panel2(하단)이 구성됩니다.
- Panel1에는 "상단 패널" Label이 표시되고, Panel2에는 TextBox가 추가됩니다.
- Splitter 동작
- Splitter를 드래그하여 Panel1과 Panel2의 크기를 동적으로 조정할 수 있습니다.
- TextBox 크기 조정
- Panel2의 크기가 변화하면 TextBox 크기도 자동으로 조정됩니다(Anchor 속성 설정).
6. 주요 개념 요약
- SplitContainer
- 패널을 두 개로 나누고, Splitter로 크기를 조정할 수 있는 컨트롤.
- Orientation
- 패널 분할 방향을 수평(Orientation.Horizontal) 또는 수직(Orientation.Vertical)으로 설정.
- Dock 및 Anchor
- SplitContainer의 Dock 속성을 통해 부모 컨테이너에 맞게 크기를 조정.
- 내부 컨트롤(TextBox 등)의 Anchor 속성을 설정하여 패널 크기 변화에 대응.
728x90
'Study > C#' 카테고리의 다른 글
C# Windows Forms 강의 34편: TableLayoutPanel을 활용한 유연한 레이아웃 관리 (0) | 2025.03.09 |
---|---|
C# Windows Forms 강의 33편: Panel과 ScrollBar를 활용한 스크롤 가능한 인터페이스 만들기 (0) | 2025.03.08 |
C# Windows Forms 강의 32편: 사용자 정의 컨트롤(User Control) 제작 (0) | 2025.03.07 |
C# Windows Forms 강의 31편: ContextMenuStrip으로 동적 컨텍스트 메뉴 구현 (0) | 2025.03.06 |
C# Windows Forms 강의 30편: DataGridView 컨트롤로 데이터 관리 (0) | 2025.03.05 |