2010-10-16 23 views
1

En bref, je veux faire une application dans laquelle les utilisateurs peuvent faire glisser un fichier de leur finder (mac), ou leur explorateur d'ordinateur (PC) à un emplacement sur mon application, puis faire glisser fichier être chargé dans l'application.C# Faites glisser et déposez la fonctionnalité

Je n'ai aucun type d'accès aux événements de glisser-déposer (suppositivement), car j'utilise un moteur de rendu pour toute l'interface graphique. (Ceci est fait dans Unity3D, pour être exact)

Quoi qu'il en soit, ce dont j'ai vraiment besoin de savoir, c'est comment obtenir le chemin du fichier de n'importe quel fichier que l'utilisateur glisse à un moment donné. Je peux m'occuper de la détection de l'endroit où le fichier a été déplacé, du chargement du fichier dans l'application, etc.

Une aide? P.S: Même si je n'ai peut-être pas accès aux événements glisser-déposer, aux noms de classe, etc., il est toujours utile d'en entendre parler!

+0

http://msdn.microsoft.com/en-us/library/ms678405.aspx –

Répondre

1

C'est assez facile à faire avec WinForms (il y a des événements pour ça là-bas).

Puisque vous n'utilisez pas WinForms, vous devez utiliser WinAPI. Vous pouvez enregistrer votre fenêtre pour accepter glisser & déposer des événements en utilisant le RegisterDragDrop Function et le IDropTarget Interface (ou utilisez le vôtre).

[DllImport("ole32.dll")] 
static extern int RegisterDragDrop(IntPtr hwnd, IDropTarget pDropTarget); 
+0

Salut! Cela a l'air génial! J'ai téléchargé une copie du fichier dll, et en utilisant "using System.Windows.Forms;" ne renvoie aucune erreur Cependant, je ne sais vraiment pas ce que je suis censé transmettre à RegisterDragDrop! Pourriez-vous s'il vous plaît m'éclairer? Aussi, est ce PC seulement? Je développe à partir d'un mac, et m userbase est principalement mac. –

+0

J'ai raté la partie Mac. ole32 est WinAPI (windows) - je ne sais pas si ça marche aussi sur les macs. Jamais essayé sur Mac. Si vous avez de la chance, l'interface 'IDropTarget' est déjà implémentée dans l'interface graphique Unity3D que vous utilisez et vous implémentez simplement les événements appropriés. Sinon, vous devrez créer votre propre contrôle et implémenter l'interface. Donc, si vous voulez déposer des fichiers dans un TextBox, vous devrez utiliser MyTextBox avec 'IDropTarget' implémenté. 'hwnd' est le handle de votre fenêtre. Je n'ai jamais utilisé Unity3D, je ne peux pas vous aider :( –

+0

Je doute que Unity3d soit fourni avec les classes nécessaires, bien que le fichier DLL que j'ai téléchargé SOIT sans aucune idée de ce qu'est un handle de fenêtre J'appelle généralement GUI.TextBox (positionnement/paramètres de texte) Unity3Di est super pour les jeux en 3D, mais c'est plutôt le moteur de l'interface utilisateur: (Y at-il d'autres options? –