반응형
1. 강의 개요
이번 강의에서는 Windows Forms에서 Drag & Drop(드래그 앤 드롭) 기능을 구현하는 방법을 학습합니다.
사용자가 파일을 폼 위로 끌어다 놓으면 파일을 자동으로 처리하고,
DataGridView 내에서 데이터를 드래그하여 정렬하는 기능을 추가합니다.
2. 학습 목표
✅ 파일을 폼으로 Drag & Drop하는 기능 구현
✅ DataGridView에서 행을 드래그하여 정렬하는 기능 추가
✅ UI 이벤트를 활용하여 사용자 경험 향상
3. 기능 요구사항
🟢 필수 기능
1️⃣ 파일 Drag & Drop 기능
- 사용자가 파일을 폼으로 드래그하면 파일 목록이 ListBox에 추가됨
2️⃣ DataGridView 데이터 Drag & Drop 정렬
- 사용자가 DataGridView의 행을 드래그하여 이동 가능
3️⃣ UI 응답성 유지
- 애플리케이션 실행 중에도 원활한 이벤트 처리 제공
4. 실습: Drag & Drop 기능 구현
1️⃣ 폼 구성
- 폼(Form) 이름: Form1
- 컨트롤 배치:
컨트롤 타입 이름 위치 크기
ListBox | lstFiles | 좌측 | (250 x 300) |
DataGridView | dgvData | 우측 | (250 x 300) |
📌 폼 디자인 예시:
------------------------------------------------
| [ lstFiles ] | [ dgvData ] |
| (파일 목록) | (드래그 정렬 가능) |
------------------------------------------------
2️⃣ 코드 작성
(1) 파일 Drag & Drop 기능 구현
using System;
using System.IO;
using System.Windows.Forms;
namespace WindowsFormsApp_DragDrop
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
InitializeDragDrop();
}
private void InitializeDragDrop()
{
this.AllowDrop = true;
this.DragEnter += Form1_DragEnter;
this.DragDrop += Form1_DragDrop;
}
// 파일이 폼 위로 올라왔을 때 이벤트
private void Form1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
e.Effect = DragDropEffects.Copy;
}
}
// 파일이 폼에 드롭되었을 때 이벤트
private void Form1_DragDrop(object sender, DragEventArgs e)
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop);
foreach (string file in files)
{
lstFiles.Items.Add(Path.GetFileName(file)); // 파일 이름 추가
}
}
}
}
(2) DataGridView 내에서 행 Drag & Drop 정렬 기능
private void InitializeDataGridView()
{
dgvData.AllowDrop = true;
dgvData.MouseDown += DgvData_MouseDown;
dgvData.DragEnter += DgvData_DragEnter;
dgvData.DragDrop += DgvData_DragDrop;
// 샘플 데이터 추가
dgvData.ColumnCount = 2;
dgvData.Columns[0].Name = "ID";
dgvData.Columns[1].Name = "이름";
dgvData.Rows.Add("1", "Apple");
dgvData.Rows.Add("2", "Banana");
dgvData.Rows.Add("3", "Cherry");
}
private void DgvData_MouseDown(object sender, MouseEventArgs e)
{
if (dgvData.SelectedRows.Count > 0)
{
dgvData.DoDragDrop(dgvData.SelectedRows[0], DragDropEffects.Move);
}
}
private void DgvData_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(DataGridViewRow)))
{
e.Effect = DragDropEffects.Move;
}
}
private void DgvData_DragDrop(object sender, DragEventArgs e)
{
Point clientPoint = dgvData.PointToClient(new Point(e.X, e.Y));
DataGridView.HitTestInfo hit = dgvData.HitTest(clientPoint.X, clientPoint.Y);
if (hit.RowIndex >= 0)
{
DataGridViewRow draggedRow = (DataGridViewRow)e.Data.GetData(typeof(DataGridViewRow));
dgvData.Rows.Remove(draggedRow);
dgvData.Rows.Insert(hit.RowIndex, draggedRow);
}
}
(3) Designer 코드
private void InitializeComponent()
{
this.lstFiles = new ListBox();
this.dgvData = new DataGridView();
// ListBox 설정
this.lstFiles.Location = new System.Drawing.Point(10, 10);
this.lstFiles.Size = new System.Drawing.Size(250, 300);
// DataGridView 설정
this.dgvData.Location = new System.Drawing.Point(270, 10);
this.dgvData.Size = new System.Drawing.Size(250, 300);
// Form 설정
this.ClientSize = new System.Drawing.Size(540, 330);
this.Controls.Add(this.lstFiles);
this.Controls.Add(this.dgvData);
this.Text = "Drag & Drop 구현";
}
3️⃣ 실행 결과
✅ 파일 Drag & Drop 기능
- 사용자가 파일을 폼으로 끌어다 놓으면 ListBox에 파일명이 추가됨.
✅ DataGridView 행 Drag & Drop 정렬 기능
- 사용자가 행을 드래그하면 순서를 변경할 수 있음.
5. 주요 개념 요약
- DragEnter 이벤트: 드래그한 항목이 폼 위에 올라왔을 때 호출됨.
- DragDrop 이벤트: 드래그한 항목이 폼에 드롭되었을 때 처리.
- DoDragDrop(): 사용자가 선택한 항목을 드래그할 수 있도록 설정.
- DataGridView 정렬: 사용자가 행을 드래그하여 순서를 변경하도록 설정.
📌 #CSharp #WindowsForms #DragDrop #파일처리 #DataGridView정렬
반응형
'📁 [4] 개발자 정보 & 코드 노트 > C#' 카테고리의 다른 글
C# Windows Forms 강의 104편: 사용자 지정 테마 변경 및 설정 저장 (0) | 2025.05.18 |
---|---|
C# Windows Forms 강의 103편: 사용자 맞춤 다크 모드 및 테마 변경 기능 (기본 다크 모드 구현) (0) | 2025.05.17 |
C# Windows Forms 강의 101편: 애니메이션 효과와 트랜지션 구현 (0) | 2025.05.15 |
C# Windows Forms 강의 100편: 사용자 설정 저장 애플리케이션 제작 - Settings 저장 및 불러오기 (0) | 2025.05.14 |
C# Windows Forms 강의 99편: 스프레드시트 애플리케이션 제작 - DataGridView를 활용한 데이터 입력 및 계산 (0) | 2025.05.13 |