2010-06-30 7 views
1

J'essaie d'obtenir des fonctionnalités similaires à winzip/winrar, etc. J'ai un Treeview qui affiche le contenu d'un package (System.IO.Packaging). Je veux être en mesure de glisser et déposer un fichier ou un dossier à partir du TreeView sur une fenêtre de l'explorateur ou le bureau, etc. Mon problème est que je dois appeler DoDragDrop avant de savoir si l'objet a même été abandonné. Cela signifie que pour créer le DataObject avec le type FileDrop, je dois extraire ces contenus du package dans une zone temporaire, puis fournir ce chemin à DataObject avant d'appeler DoDragDrop. Si l'utilisateur ne tombe pas sur un conteneur capable ou annule la baisse, le surcoût d'extraction de ces contenus est gaspillé. J'ai remarqué que winzip ne crée pas le fichier temporaire tant que la chute n'a pas eu lieu sur une cible valide. J'ai vérifié les DataFormats fournis par le drop WinZip et ils sont FileDrop normal, FileNameW, FileName et Shell IDList Array. Les trois premiers contiennent simplement une chaîne à l'emplacement temporaire que WinZip a extrait de ce fichier. Je ne suis pas sûr de ce que fait le dernier. Longue histoire courte, je veux être en mesure d'éviter d'extraire le contenu jusqu'à ce que je sais que l'emplacement de la goutte était valide. Y a-t-il un rappel pour déterminer l'emplacement du dépôt? Toute suggestion serait extrêmement utile.Fonctionnalité de glisser-déposer C#

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

Répondre

1

Je l'ai essayé avec une application similaire à un serveur FTP - je voulais commencer à télécharger seulement après que l'utilisateur a réellement laissé tomber l'élément. Malheureusement, je n'ai trouvé aucun moyen de le faire en utilisant du code managé seulement. Comme WinZip le fait probablement en recevant des callbacks COM (veuillez me pardonner si j'utilise les mauvais mots ici) et vous devrez créer un wrapper géré autour de l'objet COM natif afin de recevoir de tels callbacks toi même.

Il est certainement possible, mais j'ai donné et intégré un thingie FolderTreeView dans ma demande pour attraper les événements de chute moi-même:/

+0

J'étais dans le même bateau, j'ai d'abord concédée et a commencé à faire le FolderTree embarqué aussi, mais ça allait seulement être une solution temporaire. Merci quand même pour le conseil. –

Questions connexes