none
[vb.net] Problème de code: ajouter plusieurs items avec différentes images ajoutées dans un imagelist par code dans un listview RRS feed

  • Question

  • Bonjour,

    J'ai encore un problème.

    Quand je veux ajouter plusieurs applications windows qui se transforment donc en items qui est ajouté en un seul coup dans un listview avec la recherche de fichiers dans un dossier donné, les images des items (apps windows ajoutées dans le listview) sont les mêmes alors que les noms et les tag (ce qui permet de pouvoir les exécuter Process.Start(item.Tag) ) sont différents.

    Voici mon code:

    Try
                    Dim items As ListViewItem
                    Dim MyKey As Integer = ListView1.Items.Count
                    Dim directory = My.Settings.desdir
                    Dim files() As System.IO.FileInfo
                    Dim dirinfo As New System.IO.DirectoryInfo(directory)
                    files = dirinfo.GetFiles("*.*", IO.SearchOption.AllDirectories)
                    For Each file In files
                        items = New ListViewItem
                        items.ForeColor = Color.White
                        items.Text = IO.Path.GetFileNameWithoutExtension(file.FullName)
                        ImageList1.Images.Add(items.Text, Icon.ExtractAssociatedIcon(file.FullName))
                        items.ImageIndex = MyKey
                        items.Tag = file.FullName
                        ListView1.Items.Add(items)
                    Next
                Catch ex As Exception
                    MsgBox(ex.Message)
                End Try

    Merci d'avance à ceux qui trouveront peut-être une solution.

    Basilic Apps, Anschaire Pérard.

    mercredi 24 octobre 2012 15:23

Réponses

  • Il faut que tu choisisse une méthode, soit :

    • Un index (Integer)
    • Une chaine (String)

    Mais pas les deux en même temps : là tu utilises ce que est sensé être une chaine (MyKey) comme un entier, de plus tu lui affecte une valeur au départ (Listcount), mais plus après, alors que par définition la valeur de cette propriété change vu que c'est le nombre d'élément du Listview . Autre petite modification pour la compréhension : items n'a pas lieu d'être au pluriel, de type ListViewItem, c'est un seul Item, c'est pas grand chose, mais ça aide à la compréhension. En dernier lieu, il faut affecter l'image lors de l'ajout de l'item au ListView.

    Voici le code modifié (j'ai mis en dur le répertoire à analyser, et limité aux .exe ) :

    Try
                Dim item As ListViewItem
                Dim MyKey As String
                Dim directory = "C:\Windows\System32"
                Dim files() As System.IO.FileInfo
                Dim dirinfo As New System.IO.DirectoryInfo(directory)
                files = dirinfo.GetFiles("*.exe", IO.SearchOption.TopDirectoryOnly)
                For Each file In files
                    item = New ListViewItem
                    item.ForeColor = Color.White
                    item.Text = IO.Path.GetFileNameWithoutExtension(file.FullName)
                    MyKey = "Key_" & item.Text
                    ImageList1.Images.Add(MyKey, Icon.ExtractAssociatedIcon(file.FullName))
                    item.ImageKey = MyKey
                    item.Tag = file.FullName
                    ListView1.Items.Add(item.Text, MyKey)
                Next
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try

    Ce qui donne :


    Cordialement, Jacques

    • Marqué comme réponse Aurel Bera vendredi 26 octobre 2012 07:30
    mercredi 24 octobre 2012 16:41

Toutes les réponses

  • Il faut que tu choisisse une méthode, soit :

    • Un index (Integer)
    • Une chaine (String)

    Mais pas les deux en même temps : là tu utilises ce que est sensé être une chaine (MyKey) comme un entier, de plus tu lui affecte une valeur au départ (Listcount), mais plus après, alors que par définition la valeur de cette propriété change vu que c'est le nombre d'élément du Listview . Autre petite modification pour la compréhension : items n'a pas lieu d'être au pluriel, de type ListViewItem, c'est un seul Item, c'est pas grand chose, mais ça aide à la compréhension. En dernier lieu, il faut affecter l'image lors de l'ajout de l'item au ListView.

    Voici le code modifié (j'ai mis en dur le répertoire à analyser, et limité aux .exe ) :

    Try
                Dim item As ListViewItem
                Dim MyKey As String
                Dim directory = "C:\Windows\System32"
                Dim files() As System.IO.FileInfo
                Dim dirinfo As New System.IO.DirectoryInfo(directory)
                files = dirinfo.GetFiles("*.exe", IO.SearchOption.TopDirectoryOnly)
                For Each file In files
                    item = New ListViewItem
                    item.ForeColor = Color.White
                    item.Text = IO.Path.GetFileNameWithoutExtension(file.FullName)
                    MyKey = "Key_" & item.Text
                    ImageList1.Images.Add(MyKey, Icon.ExtractAssociatedIcon(file.FullName))
                    item.ImageKey = MyKey
                    item.Tag = file.FullName
                    ListView1.Items.Add(item.Text, MyKey)
                Next
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try

    Ce qui donne :


    Cordialement, Jacques

    • Marqué comme réponse Aurel Bera vendredi 26 octobre 2012 07:30
    mercredi 24 octobre 2012 16:41
  • Merci encore à toi, jacques93.

    Basilic Apps, Anschaire Pérard.

    PS: Tu es un très bon développeur !

    mercredi 24 octobre 2012 19:16
  • Bonjour,

    Pouvons-nous considérer que vous avez résolu votre problème avec les scénarios proposés ? Dans l'affirmative, pourriez-vous partager avec nous la solution, afin que d'autres personnes avec le même problème puissent profiter de cette solution ?

    Désormais, nous marquons les solutions proposées. N'hésitez pas à revenir et supprimer la réponse marquée si la solution n’est pas correcte. Merci !

    Cordialement,

    Aurel


    Aurel BERA, Microsoft
    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    vendredi 26 octobre 2012 07:32
  • Oui, le problème a bien été résolu.

    Merci encore.

    Cordialement,

    Basilic Apps.

    mercredi 31 octobre 2012 11:22
  • Voici la solution en vb.net:

    http://dl.dropbox.com/u/56127675/Basilic%20Apps/Basilic%20Me%20Solution%20vb.net.zip

    Cordialement,

    Basilic Apps.

    Voir sur le site: http://sites.google.com/site/basilicapps/me/ -> Application

    mercredi 31 octobre 2012 11:52