2010-06-30 3 views
1

winzip/winrar와 비슷한 기능을 구현하려고합니다. 패키지의 내용 (System.IO.Packaging)을 표시하는 Treeview이 있습니다. 드래그 앤 드롭 수있는 파일이나 폴더를 탐색기 창이나 바탕 화면 등 TreeView에서 수 내 문제는 내가 DoDragDrop 호출하기 전에 그 개체가 실제로 떨어졌다 경우도 알고 싶어요. 즉, FileDrop 유형의 DataObject을 만들려면 패키지의 해당 내용을 임시 영역으로 추출한 다음 DoDragDrop을 호출하기 전에 DataObject에 해당 경로를 제공해야합니다. 사용자가 유능한 컨테이너에 드롭하지 않거나 드롭을 취소하지 않으면 해당 내용을 추출하는 오버 헤드가 낭비됩니다. WinZip은 드롭이 유효한 타겟에서 발생할 때까지 임시 파일을 실제로 생성하지 않는다는 것을 알았습니다. 나는 WinZip 드롭에 의해 제공되는 DataFormats를 체크했다. 그리고 그들은 정상 FileDrop, FileNameW, FileName 그리고 Shell IDList Array이다. 첫 번째 3 개는 임시 위치에 문자열을 보관하기 만하면 winzip이 해당 파일을 추출합니다. 나는 마지막 하나가 무엇인지 모르겠다.C# 끌어서 놓기 기능

간단히 말해, 드롭 위치가 유효하다는 것을 알기 전까지는 내용을 추출하지 않아도됩니다. 드롭 위치를 알아내는 콜백이 있습니까? 어떤 제안이라도 도움이 될 것입니다.

System.Windows.DragDropEffects de = DragDrop.DoDragDrop(treeview1, dataObj, System.Windows.DragDropEffects.Move); 

답변

1

FTP 서버와 비슷한 응용 프로그램에서이 작업을 시도했습니다. 사용자가 실제로 항목을 삭제 한 후에 만 ​​다운로드를 시작하려고합니다. 불행히도 관리 코드 만 사용하여이 작업을 수행 할 방법을 찾지 못했습니다.

WinZip은 아마도 COM 콜백을받는 것입니다 (여기서 잘못된 단어를 사용하고 있다면 용서해주십시오). 콜백을 수신하려면 네이티브 COM 객체를 관리하는 래퍼를 만들어야합니다. 당신 자신.

그것은 확실히 가능하지만, 나는 포기하고 드롭 이벤트 나 자신 잡아 내 응용 프로그램에서 FolderTreeView 거시기를 포함 : 나는 같은 배를했다/

+0

, 나는 처음에 인정을 또한 포함 FolderTree 일을 시작했지만, 그것은 일시적인 수정 일뿐입니다. 그래도 조언 주셔서 감사합니다. –