Bonjour ou Bonsoir,
Le code suivant est une partie de mon programme (et il a une relation avec le poste précédant et je sais, il est loin d'être parfais), j'ai pu le créer grâce à différente source qui se trouve ici (l'une d'elle est celle de
cs_Le Pivert,
http://codes-sources.commentcamarche.net/source/100589-visionneuse-d-image qui m'a beaucoup aidez, Merci)
Ça consiste à récupérer le chemin d'accès d'une image en cliquant sur un bouton (avec l'aide d'une
OpenFileDialog) ou glisser l'image dans la PictureBox (grâce à l'événement
DragEnter et l'événement
DragDrop)
Les étapes sont les suivantes :
1. Récupérer le chemin d'accès de l'image;
2. Récupérer le chemin d'accès du dossier source a partir de ce dernier ;
3. Récupérer le chemin d'accès de toutes les images qui sont dans le dossier;
4. Afficher dans la ListView qui a deux fonctions d'affichages (avec deux boutons) la liste d'image :
a. Afficher les éléments sous forme de grandes miniatures (Afficher les noms et les miniatures des images grâce à ImageList);
b. Afficher les éléments sous forme détails (Colonnes :
Nom,
Type d'image,
Taille du l'image et
chemin d'accès de l'image).
Jusqu'à là tout fonction sans problème, la seule chose qui me dérange c'est que les images ne sont pas
trier comme pour le dossier (contrairement à la source de cs_Le Pivert, pourtant si je me trompe pas il y a aucun code dans sa source qui permet de trier les images automatiquement)
Alors ma question est la suivante, comment puis-je faire pour les trier automatiquement
Merci d'avance pour vos réponses
Code
Private Sub ListFiles(ByVal FolderPath As String)
Dim Noms As String = "" 'Nom de l'image
Dim FileNames = My.Computer.FileSystem.GetFiles(FolderPath, FileIO.SearchOption.SearchTopLevelOnly, "*.gif", "*.bmp", "*.png", "*.tif", "*.tiff", "*.jpg", "*.jpeg", "*.jpe", "*.jfif", "*.ico")
For Each FileName As String In FileNames 'Chemin d'accés de l'image
Noms = System.IO.Path.GetFileNameWithoutNoms(FileName) 'Récupérer le Nom de l'image sans Noms
Dim Info As New IO.FileInfo(FileName)
Dim Taille_Image_Octet As Long = info.Length
Dim Kilo_Octet As Integer = 1024 : Dim Mega_Octet As Integer = 1024 * 1024 : Dim Gega_Octet As Integer = 1024 * 1024 * 1024
Dim Type_Taille_Image As Integer : Dim Unite_Taille_Image As String
If Taille_Image_Octet < Mega_Octet And Taille_Image_Octet >= Kilo_Octet Then : Type_Taille_Image = Kilo_Octet : Unite_Taille_Image = " Ko"
ElseIf Taille_Image_Octet < Gega_Octet And Taille_Image_Octet >= Mega_Octet Then : Type_Taille_Image = Mega_Octet : Unite_Taille_Image = " Mo"
ElseIf Taille_Image_Octet >= Gega_Octet Then : Type_Taille_Image = Gega_Octet : Unite_Taille_Image = " Go" : End If
Dim Taille_Image_Finale As String = (Taille_Image_Octet / Type_Taille_Image).ToString("0.00") & Unite_Taille_Image
Dim Type_Image As String
If info.Name.Substring(info.Name.LastIndexOf(".")) = ".bmp" Or info.Name.Substring(info.Name.LastIndexOf(".")) = ".dib" Then
Type_Image = "Image Bitmap"
ElseIf info.Name.Substring(info.Name.LastIndexOf(".")) = ".gif" Then
Type_Image = "Image GIF"
ElseIf info.Name.Substring(info.Name.LastIndexOf(".")) = ".ico" Then
Type_Image = "Icone" '
ElseIf info.Name.Substring(info.Name.LastIndexOf(".")) = ".jpg" Or info.Name.Substring(info.Name.LastIndexOf(".")) = ".jpeg" Or info.Name.Substring(info.Name.LastIndexOf(".")) = ".jpe" Or info.Name.Substring(info.Name.LastIndexOf(".")) = ".jfif" Then
Type_Image = "Image JPEG"
ElseIf info.Name.Substring(info.Name.LastIndexOf(".")) = ".png" Then
Type_Image = "Image PNG"
ElseIf info.Name.Substring(info.Name.LastIndexOf(".")) = ".tif" Or info.Name.Substring(info.Name.LastIndexOf(".")) = ".tiff" Then
Type_Image = "Image TIFF"
End If
ImageList1.Images.Add(Bitmap.FromFile(FileName))
ListView1.Items.Add(New ListViewItem({Noms, Type_Image, Taille_Image_Finale, FileName}, a))
a = a + 1
Next
End Sub
'Récupérer l'image
Private Sub ButtonImage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonImage.Click
If OpenFileDialog1.ShowDialog = DialogResult.OK Then
TextBox1.Text = OpenFileDialog1.FileName 'Afficher le chemin d'accés de l'image récupérer avec l'OpenFileDialog1 dans la TexteBox1
chemin = TextBox1.Text
Using monstream As New IO.FileStream(chemin, IO.FileMode.Open, FileAccess.Read)
PictureBox1.Image = Image.FromStream(monstream)
img = Image.FromStream(monstream)
End Using
Chemin_dossier_source = System.IO.Path.GetDirectoryName(OpenFileDialog1.FileName)
Label44.Text = img.Width.ToString & " x " & img.Height.ToString 'Dimmension en pixel de l'image
ListFiles(Chemin_dossier_source) 'Dossiers()
For i As Integer = 0 To ListView1.Items.Count - 1
If ListView1.Items(i).SubItems(3).Text.Contains(TextBox1.Text) Then
ListView1.Items(i).Selected = True
Label41.Text = System.IO.Path.GetFileName(ListView1.Items(i).SubItems(3).Text)
Label9.Text = ListView1.Items(i).SubItems(2).Text
Label42.Text = ListView1.Items(i).SubItems(3).Text
Fichier_Choisi = ListView1.Items(i).SubItems(3).Text
ligne = CInt(ListView1.SelectedIndices(0).ToString())
Else
End If
Next
Fichier_selectionner = ListView1.Items(ligne).SubItems(3).Text
Else
End If
End Sub