2012-02-27 2 views
16

텍스트 상자에 전체 파일 경로가 표시되도록 파일을 끌어서 놓으 려합니다. 끌어서 놓기 이벤트를 끌어다 놓았지만 이벤트에 참가하지 않는 것으로 나타났습니다.파일을 텍스트 상자에 끌어서 놓기

private void sslCertField_DragDrop(object sender, DragEventArgs e) 
{ 
    if (e.Data.GetDataPresent(DataFormats.FileDrop, false) == true) 
    { 
     e.Effect = DragDropEffects.All; 
    } 
} 

private void sslCertField_DragEnter(object sender, DragEventArgs e) 
{ 
    string file = (string)e.Data.GetData(DataFormats.FileDrop); 
    serverURLField.Text = file; 
} 

누구나 내가 잘못하고있는 것을 지적 할 수 있습니까?

업데이트 : 프로그램이 관리자 권한으로 실행하도록 설정되어있는 경우 작동하지 않습니다

+0

당신은 우리에게 어떤 마크 업을 표시 할 수 있습니다 작동합니다? – gaurawerma

답변

17

이 텍스트 상자의 재산을 확인 (비스타/7 승리) - 그것은 true로 설정해야합니다.

string[] files = (string[])e.Data.GetData(DataFormats.FileDrop); 
if(files != null && files.Length != 0) 
{ 
    serverURLField.Text = files[0]; 
} 

그리고 나는 당신이 당신의 드래그 이벤트 핸들러에 코드를 교환해야한다고 생각 - 일반적으로 드래그 앤 드롭이 가능하다 사용자를 보여 또한, 단지 string, DataFormats.FileDrop의 경우 string[]에 드래그 앤 드롭 데이터를 변환 DragEnterDragDrop에서 실제 작업을 수행하십시오.

+0

나는 당신이 말한 모든 것을 다했습니다. allowdrop을 true로 변경하고 메소드의 내용을 변경하고 string []으로 변경했습니다. 그러나 이벤트는 여전히 활성화되지 않습니다. 이 양식은 상위 양식의 일부입니다. 그게 그 영향을 미칠까요? 그러나이 텍스트 상자는 부모 컨트롤의 일부가 아닙니다 – michelle

+2

실제로 파일을 드래그하면 거부 된 아이콘이 나타납니다 – michelle

+1

응용 프로그램이 Win7/Vista의 관리자 권한으로 실행되고 있습니까? 이 경우 탐색기에서 끌어서 놓기 기능이 작동하지 않습니다. – max

4

은 ... 당신이 당신의 솔루션을 구축 한 번 생성 한 .exe를 실행 ... 비주얼 스튜디오에서 실행하는 데 도움이 :

+1

Visual Studio에서 프로젝트를 실행하면 차이가 있습니까? 정말 ? Visual Studio에서 끌어서 놓기 기능을 해제해야합니까? – PurpleXenon

+0

그래 어떻게 든 디버그에서 작동하지 않았지만 직접적으로 작업했습니다 – PersyJack

+0

내 컨트롤을 3 번 다시 작성하려고 시도했습니다 ... (감사합니다.) – Jeff

8

높은 권한이 아무것도 할 수 없습니다해야 희망을 해달라고. 또한 Max가 응답 한 DragDrop 외에도 DragOver 이벤트를 구현해야합니다. 이 끌어서 놓기위한 추가해야합니다 코드 :

private void textBoxFile_DragOver(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effect = DragDropEffects.Copy; else e.Effect = DragDropEffects.None; }

+3

Windows Form 응용 프로그램에서 작동하려면 다음을 수행해야합니다. : 1)'TextBox.AllowDrop = true;를 설정하십시오. 2) Max의 코드를 사용하여'TextBox.DragDrop()'이벤트를 처리하십시오. 3) 위의 Joao의 코드를 사용하여'TextBox.DragOver()'이벤트를 처리하십시오. 3 가지 조건이 모두 충족되면 작동합니다. 필자의 경우 "상승 된 권한"은 필요하지 않지만 문제가있는 경우 Visual Studio 바로 가기를 "관리자 권한으로 실행"으로 변경할 수 있습니다. –

4

당신이 WPF를 사용하고 있고 아직, 당신은

를 사용해야합니다 (내 사건이었다) 여기에 대한 답변을 작동하지 않는 경우 here 설명 된대로 PreviewDragEnter 경우에
e.Handled = true; 

here (그들은 같은 기사,하지만 단지의 경우 하나가 다운). 당신의 Visual Studio를 관리자 권한 드래그에서 실행 및 기능을 삭제하는 경우

private void TextBox_PreviewDragEnter(object sender, DragEventArgs e) 
{ 
    e.Effects = DragDropEffects.Copy; 
    e.Handled = true; 
} 

private void TextBox_PreviewDrop(object sender, DragEventArgs e) 
{ 
    object text = e.Data.GetData(DataFormats.FileDrop); 
    TextBox tb = sender as TextBox; 
    if (tb != null) 
    { 
     tb.Text = string.Format("{0}", ((string[])text)[0]); 
    } 
} 
+0

PreviewDragEnter가 아니어야하며 * PreviewDragOver * 여야합니다. 그 이벤트를 사용하면 TextBox에서 저에게 도움이되었습니다. –

1

작동하지 않을 것 : 여기

은 소스에서 코드 조각입니다.

=>는 관리자 권한없이 비주얼 스튜디오를 실행하고는