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

Windows Forms Discussion :

Drag and drop entre 2 panels


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2008
    Messages : 115
    Points : 58
    Points
    58
    Par défaut Drag and drop entre 2 panels
    Bonjour. Je voudrais savoir s'il y a un truc pour pouvoir draguer le control d'un premier panel, le droper sur un 2eme panel, et trouver les coordonnées du 2eme panel où a été dropé le control si ce 2eme panel contient un scroll bar(car on y met des controls dynamiques).

    Le seul moyen que j'ai trouvé pour déplacer le contrôle entre les panels est de mettre le form parent, sinon il reste sur son panel, et si le form est parent, je ne reçois que les coordonnées par rapport au form. Si je remets le panel 2 parent, tout fouare. Est-ce que quelqu'un pourrait m'aider svp?

  2. #2
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    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 175
    Points : 25 116
    Points
    25 116
    Par défaut
    pas tout compris

    il est possible de faire du drag drop d'un panel à l'autre
    pour des controles créés à l'execution, un flowlayoutpanel est parfois plus recommandable (ca evite de se poser des questions de coordonnées)

    une fois le drag drop accepté, il suffit de remover le controle du panel1 et de l'ajouter au panel2

    les coordonnées fournis sont par rapport à l'écran je crois
    en tout cas chaque controle a des fonctions de calcul de point d'une origine à l'autre

    PointToClient
    PointToScreen

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2008
    Messages : 115
    Points : 58
    Points
    58
    Par défaut pas certaine de comprendre...
    Je débute en VB net et je suis perdue. Est-ce qu'il y a des tutos là dessus? Je me suis bcp promenée dans les tutos et les FAQ avant de poser la question, et le drag and drop est démontré pour draguer le contenu, et non le contrôle lui-même.

    Ce que je veux faire, c'est draguer un contrôle complet, le droper sur un autre panel, et capter les coordonnées du contrôle dropé par rapport au deuxième panel, tout simplement.

    Le but étant d'INSÉRER un groupe de contrôles dynamiques aux coordonnées captées, et de déplacer vers le bas les groupes de contrôles existants dans ce 2ième panel, dont les coordonnées sont sous l'endroit dragué. Est-ce que c'est plus clair?

    Merci de votre patience!

  4. #4
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 175
    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 175
    Points : 25 116
    Points
    25 116
    Par défaut
    le drag drop est expliqué partout, meme dans msdn (msdn = l'aide de vb)
    cherche dodragdrop getdatapresent getdata et y a quelques evenements qui servent
    et il faut allowdrop à true aussi

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2008
    Messages : 115
    Points : 58
    Points
    58
    Par défaut
    Le drag and drop marche, avec du contenu, mais quand vient le temps de le faire avec un contrôle, ça marche pas. Le bouton ne va que sur les limites du panel! Je ne peux pas le droper où je veux, ni à l'extérieur du panel. Voici le code que j'ai trouvé dans un tuto, que j'ai essayé;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
       Private Sub frmgammes_dragenter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragEnter
            If e.Data.GetDataPresent("System.Windows.Forms.Button") Then
                e.Effect = DragDropEffects.Move
            End If
        End Sub
        Private Sub frmgammes_dragover(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragOver
            If e.Data.GetDataPresent("System.Windows.Forms.Button") Then
                e.Effect = DragDropEffects.Move
            End If
        End Sub
        Private Sub frmgammes_dragdrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Me.DragDrop
            If e.Data.GetDataPresent("System.Windows.Forms.Button") Then
                Dim monCmd As Windows.Forms.Button = CType(e.Data.GetData("System.Windows.Forms.Button"), Button)
                With monCmd
                    .Location = Me.PointToClient(New Point(e.X, e.Y))
                    .Visible = True
                End With
            End If
        End Sub
     
        Private Sub Button1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown
            Me.Button1.DoDragDrop(Me.Button1, DragDropEffects.Move)
        End Sub
    Quelqu'un a une idée?
    Merci encore!

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    essayes cette version :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    Public Class Form1
        Private _movedButton As Button
     
        Private Sub FlowLayoutPanel1_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles FlowLayoutPanel1.DragEnter
            If e.Data.GetDataPresent("System.Windows.Forms.Button") Then
                e.Effect = DragDropEffects.Move
            End If
     
        End Sub
     
        Private Sub FlowLayoutPanel1_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles FlowLayoutPanel1.DragDrop
     
            If e.Data.GetDataPresent("System.Windows.Forms.Button") Then
     
                Dim monCmd As Windows.Forms.Button = CType(e.Data.GetData("System.Windows.Forms.Button"), Button)
                Me.FlowLayoutPanel1.Controls.Remove(_movedButton)
                With monCmd
                    .Location = Me.PointToClient(New Point(e.X, e.Y))
                    .Visible = True
                End With
                Me.FlowLayoutPanel1.Controls.Add(monCmd)
            End If
     
        End Sub
     
        Private Sub common_buttonMouseDownEvent(ByVal X As Integer, ByVal Y As Integer, ByVal mouseButton As Windows.Forms.MouseButtons)
            If mouseButton = Windows.Forms.MouseButtons.Left Then
                _movedButton = CType(Me.FlowLayoutPanel1.GetChildAtPoint(New Point(X, Y)), Button)
                _movedButton.DoDragDrop(_movedButton, DragDropEffects.Move)
                Me.Button1.DoDragDrop(_movedButton, DragDropEffects.Move)
            End If
        End Sub
     
        Private Sub Button1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button1.MouseDown
            common_buttonMouseDownEvent(e.X, e.Y, e.Button)
        End Sub
        Private Sub Button2_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Button2.MouseDown
            common_buttonMouseDownEvent(e.X, e.Y, e.Button)
        End Sub
    '   .
    '   .
    '   .
    '    Private Sub ButtonN_MouseDown(ByVal sender As Object, ByVal e As 
    '    System.Windows.Forms.MouseEventArgs) Handles ButtonN.MouseDown
    '    common_buttonMouseDownEvent(e.X, e.Y, e.Button)
    '    End Sub
     
    End Class
    dans ta version t'as pas géré l'ajout et la suppression de ton controle Button dans la liste des controle de ton panel.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2008
    Messages : 115
    Points : 58
    Points
    58
    Par défaut
    Merci! Ça fait un bout, mais c'est à peu près ce que j'avais fini par faire!

    J'ai bien appris depuis!
    Bye!

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    j'ai oublié de virer cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      Me.Button1.DoDragDrop(_movedButton, DragDropEffects.Move)
    dans cette fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Private Sub common_buttonMouseDownEvent(ByVal X As Integer, ByVal Y As Integer, ByVal mouseButton As Windows.Forms.MouseButtons)
            If mouseButton = Windows.Forms.MouseButtons.Left Then
                _movedButton = CType(Me.FlowLayoutPanel1.GetChildAtPoint(New Point(X, Y)), Button)
                _movedButton.DoDragDrop(_movedButton, DragDropEffects.Move)
              Me.Button1.DoDragDrop(_movedButton, DragDropEffects.Move)
            End If
        End Sub

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

Discussions similaires

  1. Drag and drop entre panels
    Par SgtBor dans le forum C#
    Réponses: 5
    Dernier message: 16/05/2011, 11h35
  2. Drag and Drop entre 2 panel
    Par elajjouri dans le forum Agents de placement/Fenêtres
    Réponses: 0
    Dernier message: 21/11/2008, 17h25
  3. [Débutant(e)][VB.NET] Drag and drop entre 2 treeviews
    Par - Manuella Leray - dans le forum Windows Forms
    Réponses: 8
    Dernier message: 13/10/2005, 15h54
  4. [FLASH MX2004] Drag and drop entre deux List
    Par aldo-tlse dans le forum Flash
    Réponses: 15
    Dernier message: 24/09/2005, 01h10
  5. Drag and Drop entre listbox
    Par zwoke dans le forum C++Builder
    Réponses: 2
    Dernier message: 05/07/2004, 14h10

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