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

VB.NET Discussion :

Accepter le drag&drop d'une URL dans une TextBox


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 125
    Points : 66
    Points
    66
    Par défaut Accepter le drag&drop d'une URL dans une TextBox
    Bonjour à tou(te)s,

    Je suis sous Visual Basic 2008 Express. J'ai une Form avec un TextBox. Je souhaite pouvoir faire un Drag&Drop d'une URL depuis un navigateur (IE, Firefox, Chrome, ...) vers cette TextBox.

    Mais ça ne fonctionne pas. Quand j'essaye de glisser l'URL vers la TextBox, le curseur se transforme en "Interdiction de stationner".
    J'ai cherché dans les propriétés de la TextBox pour voir s'il y avait quelque chose comme "Accepter le Drag&Drop", mais je n'ai pas trouvé.

    Si quelqu'un sait comment faire ...

    Merci d'avance.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Salut,

    Il faut que tu spécifies AllowDrop sur la textbox.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 125
    Points : 66
    Points
    66
    Par défaut
    J'ai essayé de faire ça (dans le Form Load), mais ça ne change rien.

    J'ai ajouté ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox1.AllowDrop = True
    J'ai aussi ajouté (pour vérification) un Enabled = False sur un bouton de la form, et le bouton est bien grisé.

    Etrange ...

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    il faut aussi gérer les évènements de drag drop (je ne sais plus leurs nom exacts)
    et dans ces évènements tu peux demander le type de ce qui est dragé, si ca te convient tu peux dire que tu acceptes ce type de chose, et donc l'icone change
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Après vérif sur mon poste, il faut aussi implémenter les event DragOver et DragDrop.

    désolé

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 125
    Points : 66
    Points
    66
    Par défaut


    Je ne comprends toujours pas pourquoi ça ne fonctionne pas.

    J'ai bien la propriété AllowDrop du TextBox qui est à True.
    J'ai ajouté les 2 Sub TextBox_DragDrop et TextBox_DragOver.
    Dans la première, pour l'instant, j'affiche juste un message "Toto".
    Dans la seconde, je cherche à modifier le curseur pour qu'il indique qu'on peut déposer une URL dans le champ.
    Mais le curseur reste désespérément en "Stationnement interdit".

    J'ai placé un MsgBox dans le DragOver, et il s'affiche bien quand je passe avec la souris sur la TextBox, après avoir sélectionné une URL.
    Donc, VB voit bien que je suis en mode Drag&Drop, il voit bien que je passe au dessus d'un champ qui accepte le D&D, mais il refuse toujours le drop....

    Merci de vos conseils et suggestions.

    EDIT : Je crois que j'ai trouvé : il faut ajouter dans le DragOver la ligne ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.Effect = DragDropEffects.All

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Oui c'est ça. Le DragOver permet justement de dire comment la control sous jacent se comporte vis à vis du Drag&Drop. Le DragDropEffects.All permet de tout autoriser. DragDropEffects.Cpoy est peut être suffisant.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 125
    Points : 66
    Points
    66
    Par défaut
    OK. Maintenant, je suis en train de me battre avec le DragDrop.

    J'ai trouvé sur le Net la commande suivante pour récupérer le texte de l'objet que l'on Drop :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TextBox.Text = e.Data.GetData(DataFormats.Text).ToString
    J'ai de la chance, car ça fonctionne bien avec les URL. Par contre, ça provoque une erreur si j'essaie de drop un fichier.
    Je suppose que je dois tester le type d'objet que je Drop, et n'accepter que les objets de type URL.

    Si l'un d'entre vous sait comment faire...

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    pas loin mais il faut faire ceci dans le cas d'un fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.Data.GetData(DataFormats.FileDrop)
    tu auras un tableau contenant le chemin vers le/les fichier(s) droppé(s).

  10. #10
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    il faut vérifier ce qu'il y a dans le drag drop via e.getdataformats, selon ce que c'est tu définis e.effect
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Citation Envoyé par Pol63 Voir le message
    il faut vérifier ce qu'il y a dans le drag drop via e.getdataformats, selon ce que c'est tu définis e.effect
    Oui en effet. Il faut que tu gères les différents cas de drop que tu souhaites avoir, afin de récupérer les données dans le bon format.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 125
    Points : 66
    Points
    66
    Par défaut
    Oui, j'ai bien compris qu'il faut faire un test sur le format dans le DragOver, et non dans le DragDrop (où c'est déjà trop tard).

    Mais je n'arrive pas à tester le format de l'objet que je drag. J'ai essayé e.data.getdata(dataformats.getFormat), mais ça ne marche pas.
    Je n'ai pas trouvé le e.getdataformats.

    Quant au e.Data.GetData(DataFormats.FileDrop), j'ai essayé avec
    e.Data.GetData(DataFormats.HTML), sans plus de succès.

    En résumé, je suis coincé !

  13. #13
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    il me semble qu'il faut vérifier le type dans dragover et dans dragdrop

    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 125
    Points : 66
    Points
    66
    Par défaut
    Merci à tous pour votre aide. J'ai continué les tests, mais ce n'est toujours pas concluant.

    J'ai codé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Private Sub TextBox1_DragOver ( [...])
            MsgBox("Format = " & e.Data.GetFormats.ToString)
            e.Effect = DragDropEffects.Copy
        End Sub
    Je veux en effet qu'il m'affiche le type de la donnée que je suis en train de "dragger", afin de faire des tests.
    Manque de pot, que je Drag une URL à partir d'un navigateur ou un fichier à partir du bureau Windows, l'affichage est toujours le même :
    Format = System.String[]

    Donc, je ne sais pas distinguer le type de la source pour n'accepter qu'une URL.

    Désolé de vous casser les pieds avec mon problème ...

  15. #15
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Citation Envoyé par jjcasalo Voir le message

    Je veux en effet qu'il m'affiche le type de la donnée que je suis en train de "dragger", afin de faire des tests.
    Manque de pot, que je Drag une URL à partir d'un navigateur ou un fichier à partir du bureau Windows, l'affichage est toujours le même :
    Format = System.String[]
    .
    Oui justement. Le Drag&Drop est un mécanisme général sous Windows. Tu récupère un tableau car il est tout simplement possible de déplacer plusieurs entités en même temps ! Il faut donc que tu parcoures le tableau pour avoir les chemins des fichiers.

  16. #16
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    getformats est un tableau de string, il faut faire un for each pour concaténer et voir les types contenus
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 125
    Points : 66
    Points
    66
    Par défaut
    Mais comment récupérer les éléments du tableau ?
    J'ai essayé e.Data.GetData(Array.FindLastIndex) pour trouver le nombre d'éléments du tableau, mais VB m'indique qu'il y a une erreur de syntaxe.

  18. #18
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    826
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juin 2006
    Messages : 826
    Points : 1 120
    Points
    1 120
    Par défaut
    Citation Envoyé par jjcasalo Voir le message
    Mais comment récupérer les éléments du tableau ?
    J'ai essayé e.Data.GetData(Array.FindLastIndex) pour trouver le nombre d'éléments du tableau, mais VB m'indique qu'il y a une erreur de syntaxe.
    attention, e.Data.GetData doit prendre une valeur de DataFormats, et c'est tout.

    Tu procèdes de la même façon, e.Data.GetData te renvoies un object dont tu va vérifier puis caster en un type string[].

  19. #19
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub TextBox1_DragOver ( [...])
        dim s as string = ""
        for each f as string in e.Data.getformats
            s &= f & vbcrlf 
        next
        MsgBox("Format = " & s)
        e.Effect = DragDropEffects.Copy
    End Sub
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 125
    Points : 66
    Points
    66
    Par défaut
    Merci beaucoup.
    Effectivement, avec le bout de code ci-dessus, je vois bien la différence entre un Drop d'un fichier et d'une URL :

    Ce qui est affiché sur un Drop d'une URL :
    Format= text/x-moz-url
    FileGroupDescriptorW
    FileContents
    UniformResourceLocatorW
    UniformResourceLocator
    System.string
    UnicodeText
    Text
    DragImageBits
    DragContext
    Ce qui est affiché sur un Drop d'un fichier :

    Format = Shell IDListArray
    ShellObkect Offsets
    DragImageBits
    DragContext
    InShellDragLoop
    FileDrop
    FileNameW
    FileName
    Donc, il reste à tester que l'un des résultats correspond à UniformResourceLocator. Et si Oui, alors, accepter le Drop.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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