Drag & drop et listbox : problème incompréhensible...

Résolu
violent_ken
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
- 12 déc. 2005 à 21:20
econs
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
- 13 déc. 2005 à 07:28
Violent Ken

Salut, j'ai un problème vachement bizarre : j'ai créé une fonction qui permet de faire du drag & drop entre 2 listes pour copier des éléments de leur contenu. Oui mais voilà, à partir du 832eme élément de la liste 1, le drag & drop devient difficile à la souris, voire impossible quand list1.listcount>845. Je comprend vraiment rien , une idée ??
Merci, @+

12 réponses

econs
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
23
12 déc. 2005 à 22:09
Et Hop ! Une compilation des deux codes pour faire çà avec un MultiSelect !! Enjoy !










Private Sub Form_Load()

Dim ll As Long



For ll = 0 To 1846

List1.AddItem "Element " & ll

Next ll

List1.OLEDragMode = 1

' List1.MultiSelect = 2 ' à affecter avec l'IDE

List2.OLEDropMode = 1

End Sub



Private Sub List2_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)

Dim sItems As String

Dim tablo() As String

Dim ll As Long



sItems = Data.GetData(vbCFText)

tablo = Split(sItems, Chr(13) & Chr(10), , vbBinaryCompare)



For ll = LBound(tablo) To UBound(tablo)

List2.AddItem tablo(ll)

Next ll



End Sub


















Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
3
econs
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
23
12 déc. 2005 à 22:12
Le caractère séparateur de tes données dans la première liste est un saut de ligne, il est donc composé de 2 codes Ascii :

Chr(13) & Chr(10)


Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
3
econs
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
23
12 déc. 2005 à 22:32
Tu ne peux pas faire de Drop dans une FileListBox. Elle contient le
contenu d'un dossier, tu ne peux pas y ajouter d'items (sauf en
rajoutant des fichiers dans le dossier évidemment)



Pour ajouter des éléments d'une FileListBox dans une ListBox, il faut faire ceci :







Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)

Dim ll As Long



For ll = 1 To Data.Files.Count

List1.AddItem Data.Files(ll)

Next ll



End Sub



avec List1 = La listbox qui reçoit les infos, celle sur laquelle on drope.




Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
3
econs
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
23
12 déc. 2005 à 21:36
Effectivement, c'est curieux. Une seule explication : c'est ton code
qui génère ce plantage à un indice aussi "exotique". Dépose ton code,
on y verra plus clair.



Pour info, voici un petit Drag & Drop tout con, qui fonctionne bien
avec 845 éléments, et qui fonctionne encore si on en rajoute mille de
plus ;o)








Private Sub Form_Load()

Dim ll As Long



For ll = 0 To 1846

List1.AddItem "Element " & ll

Next ll

List1.OLEDragMode = 1

List2.OLEDropMode = 1

End Sub



Private Sub List2_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)

List2.AddItem Data.GetData(vbCFText)

End Sub






















Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
violent_ken
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
12 déc. 2005 à 21:45
Violent Ken


Je vais essayer ton code, fichtrement plus simple que le mien !!!


Voici mon code :
je précise qu'il est difficilement exploitable car je l'ai fait il y a (tres tres) longtemps, avec un niveau en VB (tres) inférieur à maintenant. Personnellement je ne m'y retrouve pas vraiment non plus :

Private Sub list1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
On Error Resume Next
Aa2 = Data.GetData(1)
Dim E As Boolean
Dim o, k, j, P$
P$ = "1"
E = False
k = 0
'aa2 est du type : "C:\fichier.bmpC:\fichier2.avi"
While Not E = True
k = 1
j = j + 1
While Not Asc(P$) = 13
k = k + 1
P$ = Mid$(Aa2, k, 1)
If Len(P$) = 0 Then GoTo Termin
Wend
If (j / 100) = Int(j / 100) Then DoEvents
P$ = "1"
List1.AddItem Mid$(Aa2, 1, k - 1), 0
Aa2 = Mid$(Aa2, k + 2, Len(Aa2) - (k + 1)) If Len(Aa2) <2 Then E True
Wend
Termin
List1.AddItem Aa2, 0 'on ajoute le dernier, qui échappait à l'algorithme
End Sub

Je suis sur que c'est pas clair du tout ....
enfin merci quand même !
@+
0
violent_ken
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
12 déc. 2005 à 21:48
Violent Ken

Juste un truc, c'est

Termin :

plutot que

Termin

@+
0
econs
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
23
12 déc. 2005 à 21:59
Pfiouuu ben moi aussi je vais essayer le tien.

En première lecture, c'est effectivement pas super clair. Mais à cette
heure-ci, il me reste encore quelques neurones éveillés ... j'vais voir
çà !




Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
0
violent_ken
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
12 déc. 2005 à 22:03
Violent Ken

J'ai essayé le tien. Il marche très bien pour un élément. Mais l'adapation pour le multiline risque de faire des dégats, tout comme avec mon algo. En effet, çà part globalement du même prinicipe.
Merci en tout cas de m'aider !
@+
0
econs
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
23
12 déc. 2005 à 22:05
Ce code-ci ne ferait-il pas la même chose que le tien ??









Private Sub list1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)



On Error Resume Next

Dim tablo() As String

Dim aa2 As String

aa2 = Data.GetData(1)



tablo = Split(aa2, Chr(13), , vbBinaryCompare)

For l = LBound(tablo) To UBound(tablo)

List1.AddItem tablo(l)

Next l

End Sub










Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
0
violent_ken
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
12 déc. 2005 à 22:20
Violent Ken

Que demande le peuple ?
Bravo çà marche parfaitement ! Bien joué le coup du "split"
L'algo que je t'ai sorti date d'il y a un an et demi (c'est y a tres longtemps pour moi), je ne le comprend plus. Heureusement que je ne fait plus de truc dans ce genre :-) Mais j'ai quand même pas saisit d'où venait le bug ? A partir de 832 çà devenait "difficile", il fallait déplacer la souris doucement pour que çà marche, puis apres 845 c'était mission impossible...

Enfin, ton algo est court, propre et marche nickel. Parfait donc.
Grand merci !
Juste un truc : tu saurait comment faire un drag&drop entre une listbox et un filelistbox ? J'ai une erreur 461 avec getdata.

@+
0
violent_ken
Messages postés
1812
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
1
12 déc. 2005 à 22:59
Violent Ken

Je savais bien que l'on pouvais pas placer des objets dans la filelistbox. Ce que je cherchais, c'était comment utiliser la propriété Data, avec Data.Files pour mettre les éléments de la filelistbox dans la listbox. J'essayai data.getdata et çà ne marchait pas.

Enfin bon, le bout de programme que tu m'as fournis répond parfaitement à ma question !
Un grand merci pour ta rapidité, ta précision et la justesse de tes réponses ! Vraiment !
@+
0
econs
Messages postés
4030
Date d'inscription
mardi 13 mai 2003
Statut
Modérateur
Dernière intervention
23 décembre 2008
23
13 déc. 2005 à 07:28
Ce fut un plaisir ! :)


Manu
-------------------------------------------
Une question bien posée, c'est une chance de réponse bien adaptée.
0