IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Drag'n drop : mais avec un "drag" extérieur à l'application


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Nixar
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 302
    Par défaut Drag'n drop : mais avec un "drag" extérieur à l'application
    Bonjour à tous,

    je réalise une application en c# sous Visual 2008 (Framework 3.5). Je cherche à implémenter une fonction drag'n drop, mais en "draggant" des fichiers d'un explorateur Windows pour les "dropper" dans une région donnée de mon application. Tout ce que j'ai trouvé jusqu'à maintenant implémente un drag'n drop entre différentes régions de l'application que l'on développe... Du coup je ne détecte pas les événements liés au bouton de la souris qui reste pressé lors du déplacement. Mais j'ai peut-être mal regardé?

    Auriez-vous une piste, un tuto, ou un bout de code qui m'aiderait?

    D'avance merci,

    Bien cordialement,

    Nicolas.

  2. #2
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    Bonjour,

    tout d'abord tu dois autoriser le drop sur ta région, et t'abonner à deux évenements, le premier c'est le DragEnter, qui te permet de gérer le déplacement de la souris sur ta région (changer le curseur de la souris par exemple), et le deuxieme c'est le DragDrop, qui se produit lors d'une opération de Drag and Drop.

    prenons un exemple, tu veux dropper sur une listBox des fichiers depuis l'explorateur,

    on autorise le Drop et on s'abonne aux deux évenements cités précédement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    listBox1.AllowDrop = true;
    listBox1.DragEnter += new DragEventHandler(listBox1_DragEnter);
    listBox1.DragDrop += new DragEventHandler(listBox1_DragDrop);
    en suite mon événement DragEnter:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private void listBox1_DragEnter(object sender, DragEventArgs drgevent)
            {
                if (drgevent.Data.GetDataPresent(DataFormats.FileDrop, false) == true)
                    drgevent.Effect = DragDropEffects.All;
            }
    je change l'effet s'il s'agit d'un fichier.


    ensuite mon évenement DragDrop:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private void listBox1_DragDrop(object sender, DragEventArgs drgevent)
            {
                string[] files = (string[])drgevent.Data.GetData(DataFormats.FileDrop);
                foreach (string file in files)
                {
                    listBox1.Items.Add(file);
                }
            }
    dans mon exemple je sélectionne un ou plusieurs fichiers depuis l'exploratuer et je les drop dans ma liste box.

  3. #3
    Membre éclairé Avatar de Nixar
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 302
    Par défaut
    Bonjour chamamo,
    Tout d'abord merci pour ta réponse claire... J'ai essayé ton exemple et tout fonctionne.

    Ce que j'aurais du préciser dès le départ, c'est que je tente de faire le drop dans un WrapPanel. Ainsi, j'instancie dynamiquement dans l'event handler autant de usercontrols (créés pour mon appli) que j'ai de fichiers dans le drop, usercontrols qui se positionneront bien comme il faut dans le WrapPanel.

    Ca semble ne pas fonctionner pareil dans un WrapPanel pour le dragndrop. J'ai abonné mon objet aux mêmes event handler que la listbox de ton exemple, j'ai autorisé le drop dans le WrapPanel, et pourtant quand je tente le glisser-déposer, rien ne se passe, le curseur continue à m'indiquer que le drop n'est pas possible.

    As-tu une idée pour implémenter ton exemple sur un WrapPanel?

    Merci beaucoup d'avance.

    Bien cordialement,

    Nicolas

  4. #4
    Membre émérite Avatar de chamamo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    588
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 588
    Par défaut
    si j'ai bien compris, tu vx déposer tes fichier dans les userControls, le wrapPanel n'est qu'un conteneur de tes userCOntrols, reprend mon exemple et remplace la listBox par le user control

  5. #5
    Membre éclairé Avatar de Nixar
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 302
    Par défaut
    Bonjour,
    Non je me suis certainement mal exprimé... Les usercontrols sont créés dynamiquement en réaction au drop de fichiers dans le WrapPanel. Au départ, mon WrapPanel est vide.

    Donc je cherche bien à récupérer et traiter un drag de fichiers d'un explorateur Windows vers un WrapPanel, exactement comme le décrit ton exemple avec la ListBox... Sauf que le remplacement ListBox par WrapPanel ne semble pas si évident.

    Est-ce que c'est plus clair? Si oui, aurais-tu une idée?

    Merci beaucoup d'avance.

    Nicolas

  6. #6
    Membre éclairé Avatar de Nixar
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 302
    Par défaut
    Bonjour à tous,
    Je me permets d'ajouter une réponse à ce post pour préciser qu'outre le problème d'implémentation, je suis vraiment preneur d'une explication de fond sur le drag'n drop et les différences de gestion entre les contrôles conteneurs et les contrôles "classiques"... J'ai rencontré ce souci de drop impossible (malgré la config détaillée dans les posts ci-dessus) en essayant aussi sur un StackPanel et sur une grid.

    J'ai loupé quelque chose c'est sûr , mais si quelqu'un veut bien m'éclairer de ses lanternes ce serait super gentil

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Drag and drop ListView avec HoneyComb
    Par Heavy Metal Hero dans le forum Composants graphiques
    Réponses: 3
    Dernier message: 29/10/2013, 12h03
  2. Drag and drop (JLabel avec image )
    Par chrass dans le forum Interfaces Graphiques en Java
    Réponses: 0
    Dernier message: 06/02/2010, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo