본 문서에서는 Visual C# .NET 응용 프로그램에 끌어서 놓기 기능을 제공하는 방법을 단계별로 설명합니다. 파일 끌어서 놓기 작업의 대상으로는ListBox컨트롤을 사용합니다.
ListBox컨트롤은 처리해야 하는 두 가지의 끌어서 놓기 이벤트(DragEnter및DragDrop)를 제공합니다.DragEnter이벤트는 컨트롤의 범위 내로 개체를 끌 때 발생하며 끌고 있는 개체가 컨트롤에 놓으려는 개체인지 여부를 확인하는 데 사용합니다. 이 이벤트는 파일을 컨트롤로 끄는 경우에 처리하게 됩니다. 이 이벤트는 끌고 있는 개체에 따라 컨트롤로 개체를 끌 때 해당 아이콘이 표시되도록 합니다.DragDrop이벤트는 끌고 있는 개체를 컨트롤에 놓았을 때 발생합니다. 이 이벤트는 개체를 검색할 때 처리하게 됩니다. 데이터를 검색할 때는Data개체가 사용됩니다.
Data개체의GetData메서드는ListBox컨트롤로 끈 파일의 전체 경로 이름을 포함하는 문자열 배열을 반환합니다. 이 파일 경로 정보를 사용하여 파일에 필요한 작업을 수행할 수 있습니다. 예를 들어,System.IO네임스페이스의 클래스를 사용하여 파일을 열고 읽으며, 파일을 이동하거나 새 위치로 복사할 수 있습니다. 이 예제에서는ListBox컨트롤로 끈 파일에 대한 전체 경로만 추가합니다.
Visual C# .NET 응용 프로그램에 파일 끌어서 놓기 기능을 제공하려면 다음과 같이 하십시오.
- Visual C# .NET에서 Windows Forms 응용 프로그램을 새로 만듭니다. 기본적으로 Form1이 만들어집니다.
- 도구 상자를 사용하여 Form1에ListBox컨트롤을 추가합니다.
- 속성 창에서ListBox컨트롤의AllowDrop속성을True로 변경하여 개체를 컨트롤로 끌 수 있도록 허용합니다.
- 솔루션 탐색기에서 Form1을 마우스 오른쪽 단추로 누른 다음코드 보기를 누릅니다.
- DragEvent이벤트를 처리하려면 Windows Forms 디자이너가 Form1 클래스에 생성하는 코드 부분 아래에 다음 메서드를 추가합니다.
private void listBox1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e){ if(e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.All; else e.Effect = DragDropEffects.None;}
- DragDrop이벤트를 처리하려면 5단계에서 Form1 클래스에 추가한 메서드 바로 뒤에 다음 메서드를 추가합니다.
private void listBox1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e){ string[] s = (string[]) e.Data.GetData(DataFormats.FileDrop, false); int i; for(i = 0; i < s.Length; i++) listBox1.Items.Add(s[i]);}
- 두 이벤트 처리기를 컨트롤 이벤트와 연관시키려면 아래 코드를 Form1의InitializeComponent메서드에 추가합니다. 반드시 ListBox1을 시작한 후에 코드를 추가합니다.
this.listBox1.DragDrop += new System.Windows.Forms.DragEventHandler(this.listBox1_DragDrop);this.listBox1.DragEnter += new System.Windows.Forms.DragEventHandler(this.listBox1_DragEnter);
- 프로젝트를 빌드하고 실행합니다.
- 바탕 화면이나 다른 폴더에서 하나 이상의 파일을ListBox컨트롤로 끕니다. 파일의 전체 경로가ListBox컨트롤에 추가되었는지 확인합니다.
더 자세한 내용은 Control.DragEnter 이벤트와 Control.DragDrop 이벤트 도움말을 참고하세요.