PrinceSilk
Messages postés56Date d'inscriptionvendredi 31 janvier 2003StatutMembreDernière intervention26 mai 2013
-
11 juin 2008 à 19:44
necrom
Messages postés30Date d'inscriptionsamedi 8 mars 2003StatutMembreDernière intervention26 janvier 2011
-
19 juin 2008 à 09:19
Voila mon code, le principe, c'est que je Drop des dossiers depuis l'explorateur windows dans ma liste, qui ajoute non pas les dossiers mais le contenu des dossiers, en passant par une FileList
Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
On Error GoTo 10
Dim Dossier As Variant
For Each Dossier In Data.Files
File1.Path = Dossier
For FichierEnCour = 0 To File1.ListCount - 1
List1.AddItem File1.List(FichierEnCour)
Next FichierEnCour
10 Next Dossier
End Sub
Bien sur, si je drop un fichier, le prog sort une erreur, car File1.Path=Dossier ne passe pas...
Avec mon On Error GoTo 10, ca passe l'erreur, mais seulement une fois : Si il y a 1 fichier parmis les objets Droppés, l'erreur va passer sans bloquer le programme qui passera au Dossier suivant, mais si il y a plusieurs fichiers parmis les objets Droppés, l'erreur passe bien sur le premier fichier, mais le programme plante à cause du 2em fichier...
"On Error..." ne protège que de la première erreur, pas des suivantes... Je comprend pas trop pourquoi...
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 12 juin 2008 à 15:28
alors finalement c'est du VB6 ! pffff !... y a donc pas besoin de goto
Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim Dossier As Variant
For Each Dossier In Data.Files
On Error resume Next
File1.Path = Dossier
if err = 0 then
For FichierEnCour = 0 To File1.ListCount - 1
List1.AddItem File1.List(FichierEnCour)
Next FichierEnCour
else
Err.clear
end if
Next Dossier
End Sub
cs_Megafan
Messages postés389Date d'inscriptiondimanche 7 avril 2002StatutMembreDernière intervention23 septembre 20162 11 juin 2008 à 19:55
Salut,
'On error' en .NET, fais une recherche sur try et catch...
sinon si tu persistes avec on error, cherchesde l'aide sur resume.
et essaye de mettre des etiquettes plutot que des numeros de lignes genre 'gestion_erreur :'
ça me rapelle trop mon ZX81...
@+
Megafan
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 11 juin 2008 à 20:14
Salut,
et comme ça:
Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim Dossier As Variant
For Each Dossier In Data.Files
On Error Next GoTo 10
File1.Path = Dossier
For FichierEnCour = 0 To File1.ListCount - 1
List1.AddItem File1.List(FichierEnCour)
Next FichierEnCour
10 Next Dossier
End Sub
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 11 juin 2008 à 20:25
...
non, effetivement c'est une erreur de VB6ste, je l'ai tapper trop machinalement quand je l'ai reecrit
L'idee c'etait surtout de montrer ou il remplirait le mieux sa fonction
Kevin.Ory
Messages postés840Date d'inscriptionmercredi 22 octobre 2003StatutMembreDernière intervention 7 janvier 200911 12 juin 2008 à 11:41
Comme le dit Megafan...
Try
File1.Path = Dossier
For FichierEnCour = 0 To File1.ListCount - 1
List1.AddItem File1.List(FichierEnCour)
Next FichierEnCour
Catch Ex As Exception
End Try
Et je te conseil de mieux déclarer tes variables:
- Dim Dossier As Variant Variant? C'est quoi? En 5 ans de .NET, j'ai jamais utilisé (je suppose que c'est un 'Object')
- For FichierEnCour As Integer = 0 To File1.ListCount - 1
Mais tu n'as effectivement pas besoin de faire un Try:
For Each Dossier As String In Data.Files
If IO.Directory.Exists(Dossier) Then
File1.Path = Dossier
For Each File As String In File1.List
List1.AddItem File
Next FichierEnCour
End If
Next Dossier
D'ailleur c'est IO.Directory.GetFiles pour retourner tous les fichiers d'un dossier.
joelmarie
Messages postés27Date d'inscriptionvendredi 6 juin 2003StatutMembreDernière intervention12 juin 2008 12 juin 2008 à 12:43
Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim Dossier As Variant
For Each Dossier In Data.Files
On Error resume next
if err.number<<0 then
err.clear
goto Suite
end if
File1.Path = Dossier
For FichierEnCour = 0 To File1.ListCount - 1
List1.AddItem File1.List(FichierEnCour)
Next FichierEnCour
Suite :
Next Dossier
joelmarie
Messages postés27Date d'inscriptionvendredi 6 juin 2003StatutMembreDernière intervention12 juin 2008 12 juin 2008 à 12:44
Private Sub List1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim Dossier As Variant
For Each Dossier In Data.Files
On Error resume next
if err.number<>0 then
err.clear
goto Suite
end if
File1.Path = Dossier
For FichierEnCour = 0 To File1.ListCount - 1
List1.AddItem File1.List(FichierEnCour)
Next FichierEnCour
Suite :
Next Dossier
PrinceSilk
Messages postés56Date d'inscriptionvendredi 31 janvier 2003StatutMembreDernière intervention26 mai 2013 12 juin 2008 à 13:14
Merci beaucoup, mais ca marche pas :(
Enfin si, mais j'obtenait le même résultat avec simplement "On Error Resume Next" au début de ma Sub...
c'est à dire que pour chaque élément Dossiers qui engendre une erreur, le programme continue et remplit la liste avec le contenu du dernier répertoire ajouté...
necrom
Messages postés30Date d'inscriptionsamedi 8 mars 2003StatutMembreDernière intervention26 janvier 2011 19 juin 2008 à 09:19
Personellement je conseillerai une structure Try Catch il faut absolument éviter l'utilisation des Goto meme en VB 6 et je te conseille trés largement de te former a vb.net tu va comprendre les avantages (sauf si tu fonctionnes sur d'anciennes configurations)