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;
}
'Programing > 닷넷' 카테고리의 다른 글
[NHibernate] 현재 시간 current_timestamp (0) | 2014.03.17 |
---|---|
[C#] 애플리케이션 경로 (0) | 2014.03.06 |
[Winform] 단축키(Accelerator) (0) | 2014.02.03 |
[C#] 환경변수 - 시스템폴더 (0) | 2014.01.28 |
Enum에 Description 확장메소드 추가하기 (0) | 2014.01.23 |