WinForm에서 Drag and Drop 구현
탐색기에서 텍스트 파일을 Form에 Drag&Drop하면 해당 텍스트 파일의 내용을 출력하는 예제를 작성해 봅니다.
Form의 OnDragEnter(), OnDragDrop() 이벤트 핸들러를 오버라이드하여 구현합니다.
0. Form의 AllowDrop 속성을 True로 설정해야 합니다.
|
this.AllowDrop = true; |
1. Drag Effect 출력 - OnDragEnter()
|
// 드래그 효과 출력 protected override void OnDragEnter(DragEventArgs drgevent) { // 파일이 드래그 될 경우에만 Copy 효과 if(drgevent.Data.GetDataPresent(DataFormats.FileDrop)) { drgevent.Effect = DragDropEffects.Copy; } else { drgevent.Effect = DragDropEffects.None; } base.OnDragEnter(drgevent); } |
탐색기에서 드래그한 파일이 폼 위에서 드래그될 때 마우스 커서를 복사 아이콘으로 변경합니다.
2. Drop 파일 처리 – OnDragDrop()
|
// 파일 || 텍스트 드랍 처리(워드 카운트) protected override void OnDragDrop(DragEventArgs drgevent) { if(drgevent.Data.GetDataPresent(DataFormats.FileDrop)) { string[] fileNames; fileNames = (string[])drgevent.Data.GetData(DataFormats.FileDrop); … } base.OnDragDrop(drgevent); } |
폼 위에서 드랍(마우스 버튼을 뗄 때)하면 DragEventArgs 매개변수 drgevent의 Data객체에서 FileDrop 포맷에 맞는 데이터를 가져옵니다.
FileDrop 포맷의 경우 파일명 배열을 반환합니다.
3. Drag 시작 – OnMouseDown(), DoDragDrop()
|
// 드래그 시작 void override OnMouseDown(object sender, MouseEventArgs e) { … control.DoDragDrop(dragObject,DragDropEffects.Copy); … } |
ListView나 ListBox등의 아이템을 드래그할 경우 해당 컨트롤의 MouseDown() 이벤트 핸들러에서 DoDragDrop() 메서드에 드래그할 데이터와 드래그효과를 설정하여 구현할 수 있습니다.
드래그할 데이터의 포맷에 따라 OnDragEnter(), OnDragDrop() 이벤트 핸들러의 GetDataPresent()와 GetData() 메서드의 DataFormats를 적절히 변경해야 합니다.



이올린에 북마크하기
Prev
Rss Feed