본문 바로가기

Programing/닷넷

[C#] WinForm - Drag & Drap 구현하기 (아이콘 변화)

DragEnter라는 이벤트가 발생할 때 인자로 넘어온 DragEventArgs의 Effect 속성을 부여해주는 것으로 구현 가능하다.


처음에 보이는 기본 뼈대는 아래와 같다.

private void MainForm_DragEnter(object sender, DragEventArgs e)

{

}


여기에 e.Effect에 DragDropEffects.Copy 라는 지정을 하면 아래 그림처럼 아이콘이 바뀐다.

private void MainForm_DragEnter(object sender, DragEventArgs e)

{

e.Effect = DragDropEffects.Copy;

}


DragDropEffects 열거형은 Scroll, All, None, Copy, Move, Link의 6가지 경우가 있다.

파일을 드래그 했을 때 Effect 프로퍼티를 각 값으로 설정했을 때 아이콘 변화를 정리하면 아래와 같다. 



그렇다면, 드래그 되는 유형에 따라 아이콘을 표시를 할지 말지를 결정하려면 어떻게 하면 될까?

DragEventArgs에보면 Data 프로퍼티를 이용하면 데이터의 유형을 알 수있는 GetDataPresent 라는 메서드가 있다.

문자열로 데이터 포맷을 적으면 되는데 뭘 적어야 할지 모를 수 있으므로 DataFormats 클래스를 이용한다.

아래는 파일 드롭이 이루어져서 프로그램 Form으로 들어오면 아이콘 변화를 하게 하는 코드이다.

private void MainForm_DragEnter(object sender, DragEventArgs e)

{

    bool IsFileDrop = e.Data.GetDataPresent(DataFormats.FileDrop);

    e.Effect = (IsFileDrop ? DragDropEffects.Copy : DragDropEffects.None);

}



세부적인 구현은 다른 사이트에 잘 되어 있으니 http://blog.naver.com/hamstery/110091440329 등을 참고하세요.


나의 경우는 아래 처럼 보통 짠다.

private void textBoxFile_DragDrop(object sender, DragEventArgs e)

{

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

    foreach (string file in files)

    {

        if (!Directory.Exists(file))

        {

            textBoxFile.Text = file;

            break;

        }

    }

}


private void textBoxFile_DragEnter(object sender, DragEventArgs e)

{

    e.Effect = DragDropEffects.Copy;

}