반응형
1. 강의 개요
이번 강의에서는 RichTextBox 컨트롤을 활용하여 간단한 메모장(Notepad) 애플리케이션을 제작합니다.
파일을 열고, 내용을 편집하며, 저장할 수 있는 기능을 구현합니다.
또한 글꼴(Font) 변경과 텍스트 색상(Color) 변경 기능을 추가하며, 단축키(Ctrl+S, Ctrl+O)를 지원합니다.
2. 학습 목표
- RichTextBox 컨트롤 사용법 이해
- OpenFileDialog와 SaveFileDialog를 활용한 파일 입출력 구현
- FontDialog와 ColorDialog를 이용한 글꼴 및 색상 변경 기능 구현
- 단축키(Ctrl+S, Ctrl+O)를 설정하여 사용자 편의성 향상
3. 기능 요구사항
필수 기능
1️⃣ 파일 열기: OpenFileDialog를 통해 텍스트 파일 열기
2️⃣ 파일 저장: SaveFileDialog를 사용하여 텍스트 파일 저장
3️⃣ 글꼴 변경: FontDialog를 통해 텍스트 글꼴 변경
4️⃣ 텍스트 색상 변경: ColorDialog를 통해 텍스트 색상 변경
5️⃣ 단축키 지원: Ctrl+S(저장), Ctrl+O(열기)
4. 실습: 메모장 애플리케이션 구현
1️⃣ 폼 구성
- 폼(Form) 이름: Form1
- 컨트롤 배치
컨트롤 타입 이름 텍스트 위치 크기
MenuStrip | menuStrip | (없음) | 상단 | (400 x 30) |
RichTextBox | rtbEditor | (없음) | 폼의 중앙 | (380 x 250) |
2️⃣ 메뉴 구성 (MenuStrip)
메뉴 하위 메뉴 기능
파일 | 열기(Open) | OpenFileDialog를 사용해 파일 열기 |
저장(Save) | SaveFileDialog를 사용해 파일 저장 | |
종료(Exit) | 애플리케이션 종료 | |
서식 | 글꼴(Font) | FontDialog로 글꼴 변경 |
텍스트 색상(Color) | ColorDialog로 텍스트 색상 변경 |
3️⃣ 코드 작성
Form1.cs
using System;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApp_Notepad
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
InitializeEvents();
}
// 이벤트 연결
private void InitializeEvents()
{
openToolStripMenuItem.Click += OpenFile;
saveToolStripMenuItem.Click += SaveFile;
exitToolStripMenuItem.Click += (s, e) => Application.Exit();
fontToolStripMenuItem.Click += ChangeFont;
colorToolStripMenuItem.Click += ChangeColor;
// 단축키 설정
this.KeyPreview = true;
this.KeyDown += Form1_KeyDown;
}
// 파일 열기
private void OpenFile(object sender, EventArgs e)
{
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
openFileDialog.Filter = "텍스트 파일 (*.txt)|*.txt|모든 파일 (*.*)|*.*";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
rtbEditor.Text = File.ReadAllText(openFileDialog.FileName);
}
}
}
// 파일 저장
private void SaveFile(object sender, EventArgs e)
{
using (SaveFileDialog saveFileDialog = new SaveFileDialog())
{
saveFileDialog.Filter = "텍스트 파일 (*.txt)|*.txt";
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
File.WriteAllText(saveFileDialog.FileName, rtbEditor.Text);
}
}
}
// 글꼴 변경
private void ChangeFont(object sender, EventArgs e)
{
using (FontDialog fontDialog = new FontDialog())
{
if (fontDialog.ShowDialog() == DialogResult.OK)
{
rtbEditor.Font = fontDialog.Font;
}
}
}
// 텍스트 색상 변경
private void ChangeColor(object sender, EventArgs e)
{
using (ColorDialog colorDialog = new ColorDialog())
{
if (colorDialog.ShowDialog() == DialogResult.OK)
{
rtbEditor.ForeColor = colorDialog.Color;
}
}
}
// 단축키 이벤트 처리
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.S) // Ctrl + S
{
SaveFile(sender, e);
}
else if (e.Control && e.KeyCode == Keys.O) // Ctrl + O
{
OpenFile(sender, e);
}
}
}
}
Form1.Designer.cs
namespace WindowsFormsApp_Notepad
{
partial class Form1
{
private System.ComponentModel.IContainer components = null;
private MenuStrip menuStrip;
private RichTextBox rtbEditor;
private ToolStripMenuItem fileToolStripMenuItem;
private ToolStripMenuItem openToolStripMenuItem;
private ToolStripMenuItem saveToolStripMenuItem;
private ToolStripMenuItem exitToolStripMenuItem;
private ToolStripMenuItem formatToolStripMenuItem;
private ToolStripMenuItem fontToolStripMenuItem;
private ToolStripMenuItem colorToolStripMenuItem;
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
private void InitializeComponent()
{
this.menuStrip = new MenuStrip();
this.fileToolStripMenuItem = new ToolStripMenuItem();
this.openToolStripMenuItem = new ToolStripMenuItem();
this.saveToolStripMenuItem = new ToolStripMenuItem();
this.exitToolStripMenuItem = new ToolStripMenuItem();
this.formatToolStripMenuItem = new ToolStripMenuItem();
this.fontToolStripMenuItem = new ToolStripMenuItem();
this.colorToolStripMenuItem = new ToolStripMenuItem();
this.rtbEditor = new RichTextBox();
this.menuStrip.Items.AddRange(new ToolStripItem[] {
this.fileToolStripMenuItem,
this.formatToolStripMenuItem
});
this.fileToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] {
this.openToolStripMenuItem,
this.saveToolStripMenuItem,
this.exitToolStripMenuItem
});
this.formatToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] {
this.fontToolStripMenuItem,
this.colorToolStripMenuItem
});
// 메뉴 텍스트 설정
this.fileToolStripMenuItem.Text = "파일";
this.openToolStripMenuItem.Text = "열기";
this.saveToolStripMenuItem.Text = "저장";
this.exitToolStripMenuItem.Text = "종료";
this.formatToolStripMenuItem.Text = "서식";
this.fontToolStripMenuItem.Text = "글꼴";
this.colorToolStripMenuItem.Text = "텍스트 색상";
// RichTextBox 설정
this.rtbEditor.Dock = DockStyle.Fill;
// Form 설정
this.ClientSize = new System.Drawing.Size(400, 300);
this.Controls.Add(this.rtbEditor);
this.Controls.Add(this.menuStrip);
this.MainMenuStrip = this.menuStrip;
this.Text = "간단한 메모장";
}
}
}
5. 실행 결과
1️⃣ 초기 화면
- 빈 RichTextBox와 상단 메뉴가 보임
2️⃣ 파일 열기
- "파일 → 열기" 클릭 → 텍스트 파일 선택 → 내용 표시
3️⃣ 파일 저장
- "파일 → 저장" 클릭 → 텍스트 파일 저장
4️⃣ 글꼴/색상 변경
- "서식 → 글꼴/텍스트 색상" 선택 → 적용
5️⃣ 단축키 작동
- Ctrl+S → 파일 저장
- Ctrl+O → 파일 열기
6. 주요 개념 요약
- RichTextBox: 텍스트 입력 및 편집 컨트롤
- OpenFileDialog/SaveFileDialog: 파일 입출력 대화 상자
- FontDialog/ColorDialog: 글꼴 및 색상 변경 대화 상자
- 단축키 핸들링: KeyDown 이벤트로 단축키 처리
반응형
'📁 [4] 개발자 정보 & 코드 노트 > C#' 카테고리의 다른 글
C# Windows Forms 강의 56편: DataGridView를 활용한 데이터 필터링 및 정렬 기능 구현 (1) | 2025.03.31 |
---|---|
C# Windows Forms 강의 55편: TreeView를 활용한 폴더 탐색기 구현 (0) | 2025.03.30 |
C# Windows Forms 강의 53편: 간단한 음악 플레이어 구현 (0) | 2025.03.28 |
C# Windows Forms 강의 52편: To-Do List 애플리케이션 제작 (0) | 2025.03.27 |
C# Windows Forms 강의 51편: 메모장 애플리케이션 제작 (0) | 2025.03.26 |