Drag and drop

Résolu
Chihaya - Modifié par Chihaya le 5/04/2014 à 15:10
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 6 avril 2014 à 13:24
Bonjour,

Après avoir réussi a finir mon TP, j'ai voulu tester plusieurs choses.
Plutôt que de créer des panels directement dans la Form, j'ai voulu les créer dans le code

 For i = 0 To 20

            For j = 0 To 19

                Dim P As New Panel

                TLPcouleur.Controls.Add(P)

                P.BackColor = Color.FromArgb(Int(255 * Rnd()), Int(255 * Rnd()), Int(255 * Rnd()))
                AddHandler P.Click, AddressOf panelCouleur_click
                AddHandler P.DoubleClick, AddressOf panelCouleur_Doubleclick
                AddHandler P.MouseDown, AddressOf Panelcouleur_MouseDown
                AddHandler P.MouseMove, AddressOf panelCouleur_MouseMove
                AddHandler P.DragEnter, AddressOf panelCouleur_DragEnter
                AddHandler P.DragDrop, AddressOf panelCouleur_DragDrop

            Next

        Next


Je leurs ajoute donc les events dont j'ai besoin

Le problème est que les seuls event qui fonctionnent sont Click, DoubleClick, mouseDown et MouseMove, les events DragEnter et DragDrop ne fonctionnent plus et j'ignore pourquoi.
Le code pour les 4 Sub des events nécessaires pour mon DragandDrop sont les suivantes :
Private Sub panelcouleur_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

    MouseIsDown = True

End Sub


Private Sub panelCouleur_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs)

    If Not tmrAvancer.Enabled Then
        If MouseIsDown Then
            actualPanel = CType(sender, Panel)
            actualPanel.DoDragDrop(actualPanel.BackColor.Name, DragDropEffects.Copy Or DragDropEffects.Move)

        End If
        MouseIsDown = False
    End If

End Sub


Private Sub panelCouleur_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs)
    If Not tmrAvancer.Enabled Then
        If (e.Data.GetDataPresent(DataFormats.Text)) Then
            e.Effect = DragDropEffects.Copy
        Else
            e.Effect = DragDropEffects.None
        End If
    End If
End Sub


Private Sub panelCouleur_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs)
    If Not tmrAvancer.Enabled Then
        actualPanel.Tag = sender.backcolor
        sender.backcolor = actualPanel.BackColor
        actualPanel.BackColor = actualPanel.Tag
    End If
End Sub


ne prenez pas en compte les "if...end if" avec "Not tmrAvancer.Enabled ", il ne concerne pas mon problème.
TLPcouleur est un TableLayoutPanel de 21 colonnes et 20 lignes
Quelqu'un à une idée d'où vient mon problème ?
Si vous avez besoin de précisions sur quelque chose n'hésitez pas à me demander :3

Merci

3 réponses

cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 56
5 avril 2014 à 23:07
Bonjour
d'abord active option explicit on et option strict on
et decoche visualbasic des "imported namespaces"
et ensuite corrige tes erreurs

ex au lieu de
      P.BackColor = Color.FromArgb(Int(255 * Rnd()), Int(255 * Rnd()), Int(255 * Rnd()))

Dim r As New Random
P.BackColor = Color.FromArgb(r.Next(0, 256), r.Next(0, 256), r.Next(0, 256))

il y en d'autre aussi
0
Lesquels je dois décocher ?
http://puu.sh/7XndU.png

et quel est la différence entre r.Next(0, 256) et Int(255 * Rnd()) ? surtout que ça fonctionne bien ~~
0
cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 56
6 avril 2014 à 00:59
le premier
r.Next(0, 256) en vb.net
Int(255 * Rnd()) en vb6
et aussi
active option explicit on et option strict on
0
Je l'ai fait, mais ça ne résout pas mon problème ~~
0
cs_ShayW Messages postés 3258 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 56
6 avril 2014 à 01:11
et
active option explicit on et option strict on ?
0
oui :3
il reste par contre une erreur avec la msgbox et je sais pas pourquoi *-*
0
Sujet résolu, il suffisait d'ajouter une ligne :
P.AllowDrop = true
dans la boucle, cette option est a False de base
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 236
6 avril 2014 à 13:24
Bonjour,
C 'est surement cela qui a "résolu" l'apparition d'un message d'erreur avec "la msgbox" et "option Strict On" ...
!!!
Ouais, ouais ...
0