Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

윈폼개발

닷넷을 기반으로 한 윈도우 응용프로그램 개발 지식을 다룹니다. 비지니스 응용프로그램을 위한 닷넷 윈폼 응용프로그램은 아주 강력합니다

[드래그&드랍] 파일을 끌어서 텍스트 박스로 놓기

작성자 : 박종명
최초 작성일 : 2008-06-26 (목요일)
최종 수정일 : 2008-06-26 (목요일)
조회 수 : 3037

대부분의 윈도우 응용프로그램에서는 드래그 & 드랍을 지원합니다.

드래그 & 드랍은 특정 개체를 선택하여 내가 원하는 위치로 마우스로 쭈~욱 끌어서 놓는  아주 편리한 기능입니다.

 

요즘은 윈도우 응용프로그램 뿐만 아니라 웹 응용프로그램에서도 이와 유사한 기능을 심심찮게 볼 수 있습니다.

 

이러한 드래그 & 드랍은 사용상의 편의성을 제공하며 직관적인 인터페이스를 지향하는 훌륭한 접근방식이라 볼 수 있습니다.

 

Microsoft .NET 의 윈폼 컨트롤은 드래그 & 드랍을 기본적으로 지원하며 이와 관련된 다양한 제어방법도 제공합니다.

이번 글에서는 간단한 샘플을 작성하여 드래그 & 드랍을 처리하는 방법을 익혀 보도록 하겠습니다.

 

 

1. Drag & Drop 이란

윈도우 환경에서 특정 컨트롤(데이터)를 마우스로 찌~익 끌어서 다른 컨트롤로 놓아 데이터를 이동시키는

표준화된 Action 이라고 할 수 있다.

 

     

위 그림처럼 test.txt 파일을 마우스로 끌어서 메모장에 놓으면 test.txt 파일의 데이터가 메모장으로 나타나게 된다

, 컨트롤간 데이터 이동 혹은 컨트롤 자체 이동을 위한 표준화된 작업 인터페이스이다

 

2. 닷넷에서의 Drag & Drop

닷넷(윈폼)에서는 이와 같은 Drag & Drop 을 완벽히 지원한다.

 

2-1. Source Target

말 그대로 끌어다 놓기를 수행할 때 끌어올 놈(Source) 과 끌어다 놓을 놈(Target)가 필요하다.

 

2-2. Control.AllowDrop

윈폼 컨트롤들의 상위 클래스인 Control 클래스에는 AllowDrop 라는 공개속성을

노출하여 해당 컨트롤이 끌어다 놓기의 대상이 될 수 있는지 여부를 지정할 수 있게 한다
, 이 속성이 true 가 되면 이 컨트롤에는 끌어서 데이터를 놓을 수 있는 컨트롤이 된다.

따라서 이 속성이 true 이면 Target 컨트롤이 되는 것이다.

 

2-3. Drga & Drop Events

Drag & Drop 를 수행하기 위해 컨트롤에서는 몇 가지 이벤트를 지원한다

1) Control.DragDrop: 마우스로 끌어온 데이터를 Target 컨트롤에 놓는 순간 발생

2) Control.DragEnter : 데이터를 마우스로 끌어서 Target 컨트롤 영역에 들어오는 순간 발생

3) Control.DragOver : 데이터를 마우스로 끌어서 Target 컨트롤 위에 일정 시간 동안 위치 시키는 경우 발생

4) Control.DragLeave : 끌어서 Taget 컨트롤 영역으로 들어왔던 마우스가 컨트롤 영역 밖으로 빠져 나가난 순간 발생

 

3. 구현을 위한 가이드 라인

Drag & Drop 를 구현하기 위한 기본사항을 명시한다.

아래 3가지만 있으면 구현이 가능하다. 단 더 많은 기능적 요구사항이 있다면 기타 이벤트를 사용할 수도 있다.


1) Target
컨트롤의 AllowDrop 속성을 true 로 설정하라

    이 속성이 true 가 되어야 끌어다 놓을 수 있는 컨트롤이 된다

 

2) Target 컨트롤의 DragEnter 이벤트를 구현하라

    이 이벤트에서 제공되는 DragEventArgs 객체의 Data 속성을 이용하여 
    Source
데이터가 이 컨트롤로 끌어다 놓을 수 있는 형식이지를 판단한다.

    또한 가능한 형식이면 끌어다 놓을 수 있도록 명시 한다.

 

3) Target 컨트롤의 DragDrop 이벤트를 구현하라

  - 마지막 단계로 Source 데이터를 이 컨트롤에 표현할 방법을 정의 한다.

 

 

* Demo ? 1. TXT 파일 내용을 TextBox 컨트롤로 끌어다 놓기

아래 그림처럼 텍스트 파일을 통째로 마우스로 끌어다가 폼의 텍스트 박스 위에

놓으면 파일의 내용이 텍스트 박스에 나타나는 데모 입니다

 

 

 

 

1) 텍스트 박스의 AllowDrop 속성을 아래와 같이 true 로 설정 합니다.

 

 

2) DragEnter , DragDrop 이벤트를 구독 합니다

    this.memo.DragDrop +=  new System.Windows.Forms.DragEventHandler(this.memo_DragDrop);

             this.memo.DragEnter += new System.Windows.Forms.DragEventHandler(this.memo_DragEnter);

 

3) 각 이벤트 핸들러에 아래와 같이 구현 합니다.

 

//끌어서 놓기 작업이 완료되면 발생합니다.     

private void memo_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)

{

             string fullName = ((string[])e.Data.GetData(DataFormats.FileDrop))[0];                

        StreamReader sr =

                             new StreamReader(fullName, Encoding.GetEncoding("euc-kr"));                  

                                                     string temp = sr.ReadToEnd();

 

             if(temp.Length > memo.MaxLength)

             {

             MessageBox.Show("데이터 길이 초과", "Error", MessageBoxButtons.OK);

             }

             else

             memo.Text = temp;

 

             sr.Close();

}                        

 

//개체를 컨트롤의 범위 안으로 끌면 발생하는 이벤트

private void memo_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)

{                                      

             //만일 끌어온 데이터가 해당 컨트롤의 형식 요구사항을 충족하면..

             if (e.Data.GetDataPresent(DataFormats.FileDrop))

 //Source 데이터를 Taget 컨트롤로 복사하도록 한다

       e.Effect = DragDropEffects.Copy;

             else

e.Effect = DragDropEffects.None;

}

 

 

 

이름
비밀번호
홈페이지
BC <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요