Developpez.com

Plus de 14 000 cours et tutoriels en informatique professionnelle à consulter, à télécharger ou à visionner en vidéo.

FAQ VB.NETConsultez toutes les FAQ

Nombre d'auteurs : 36, nombre de questions : 239, dernière mise à jour : 24 mai 2015  Ajouter une question

 

Cette FAQ a été réalisée pour répondre aux questions les plus fréquemment posées sur le forum Développement DotNET

Je tiens à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle contient sont correctes. Les auteurs font le maximum, mais l'erreur est humaine. Si vous trouvez une erreur, ou que vous souhaitez devenir rédacteur, lisez ceci.

Sur ce, je vous souhaite une bonne lecture.


SommaireWinFormsListView (4)
précédent sommaire suivant
 

L'objet ListViewSubItem a une propriété BackColor mais pour que l'assignation soit effective il ne faut pas oublier de modifier la propriété UseItemStyleForSubItems du ou des ListViewItem concerné(s) en lui attribuant la valeur False.

Si vous souhaitez effectuer cette manœuvre par programmation, voici un exemple :
Coloration en jaune de toute la première colonne d'un ListView1

Code vb.net : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
Imports System 
Imports System.Drawing 
Imports System.Windows.Forms 
' ... 
Dim lvi As ListViewItem 
For Each lvi In Me.ListView1.Items 
    lvi.UseItemStyleForSubItems = False 
    lvi.SubItems(0).BackColor = Color.Yellow 
Next 
Me.ListView1.View = View.Details

Mis à jour le 30 octobre 2013 neguib

L'objet ListView dispose d'une propriété ListViewItemSorter de type IComparer. Cela permet d'implémenter sa propre gestion du tri.
Pour ce faire, il faut créer une classe dérivant de IComparer implémentant la méthode Compare.

Code vb.net : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Class ListViewItemComparer 
    Implements IComparer 
    Private col As Integer 
    Private sortOrder As SortOrder 
  
    Public Sub New() 
        col = 0 
        sortOrder = Windows.Forms.SortOrder.Ascending 
    End Sub 
  
    Public Sub New(ByVal column As Integer) 
        col = column 
        sortOrder = Windows.Forms.SortOrder.Ascending 
    End Sub 
  
    Public Sub New(ByVal column As Integer, ByVal s As SortOrder) 
        col = column 
        sortOrder = s 
    End Sub 
  
    Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare 
        If sortOrder = Windows.Forms.SortOrder.Ascending Then 
            Return String.Compare(CType(x, ListViewItem).SubItems(col).Text, CType(y, ListViewItem).SubItems(col).Text) 
        Else 
            Return String.Compare(CType(y, ListViewItem).SubItems(col).Text, CType(x, ListViewItem).SubItems(col).Text) 
        End If 
    End Function 
  
End Class
Ensuite, il suffit d'intercepter le clic sur les colonnes (événement ColumnClick) et d'instancier cette classe.

Code vb.net : Sélectionner tout
1
2
3
4
5
6
7
8
9
Private Sub ListView1_ColumnClick(ByVal sender As System.Object, _ 
    ByVal e As System.Windows.Forms.ColumnClickEventArgs) Handles ListView1.ColumnClick 
    If Me.ListView1.Sorting = SortOrder.Ascending Then 
        Me.ListView1.Sorting = SortOrder.Descending 
    Else 
        Me.ListView1.Sorting = SortOrder.Ascending 
    End If 
    Me.ListView1.ListViewItemSorter = New ListViewItemComparer(e.Column, Me.ListView1.Sorting) 
End Sub
Remarque : j'effectue ici une comparaison de chaines, il faudra implémenter différemment si on compare des nombres par exemple.

Mis à jour le 30 octobre 2013 nico-pyright(c)

Dans l'exemple suivant, j'utilise des icônes stockés dans un contrôle ImageList. Partons du cas suivant :

Code vb.net : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
  
    With Me.ListView1 
        .LargeImageList = Me.ImageList1 
        .MultiSelect = False 
        .Activation = ItemActivation.TwoClick 
        .View = View.LargeIcon 
    End With 
    For Cmpt As Int32 = 0 To 5 
        Me.ListView1.Items.Add("Elément " & Cmpt, Cmpt) 
    Next 
  
End Sub
Notez que je passe l'index de l'image souhaitée pour l'élément directement dans le Add. Une écriture plus lisible serait :

Code vb.net : Sélectionner tout
1
2
3
4
5
6
7
8
For Cmpt = 0 To 5 
    Dim ObjetList As New ListViewItem 
    With ObjetList 
        .Text = "Elément " & Cmpt 
        .ImageIndex = Cmpt 
    End With 
    Me.ListView1.Items.Add(ObjetList) 
Next
Cette écriture est souvent plus intéressante que la première parce qu'elle donne accès à d'autres propriétés de mise en forme des éléments. Ainsi le code suivant met aussi la police en rouge pour un élément sur deux et en italique pour tous les éléments :

Code vb.net : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
For Cmpt = 0 To 5 
    Dim ObjetList As New ListViewItem 
    With ObjetList 
        .Text = "Elément " & Cmpt 
        .ImageIndex = Cmpt 
        If Cmpt Mod 2 = 0 Then .ForeColor = Color.Red 
        .Font = New Font("Arial", 10, FontStyle.Italic) 
    End With 
    Me.ListView1.Items.Add(ObjetList) 
Next

Mis à jour le 30 octobre 2013 bidou

Une liste de ce type est un contrôle ListView dont la propriété View vaut « Details ». L'exemple suivant est une liste de fichier classique ou les fichiers « Zip » seront affichés en vert.

Code vb.net : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
  
    Dim Repertoire As New System.IO.DirectoryInfo("d:\user\tutos") 
    Dim ListeFichier() As System.IO.FileInfo = Repertoire.GetFiles 
    Me.ListView1.View = View.Details 
    With Me.ListView1 
        .Columns.Add("Nom", 200, HorizontalAlignment.Center) 
        .Columns.Add("Taille", 80, HorizontalAlignment.Right) 
        .Columns.Add("Date", 100, HorizontalAlignment.Center) 
    End With 
    Dim cmpt As Int32 
    For cmpt = 0 To ListeFichier.GetUpperBound(0) 
        With Me.ListView1.Items.Add(ListeFichier(cmpt).Name) 
            .SubItems.Add(ListeFichier(cmpt).Length.ToString) 
            .SubItems.Add(ListeFichier(cmpt).CreationTime.ToString) 
            If ListeFichier(cmpt).Extension.IndexOf("zip") > 0 Then 
            .ForeColor = Color.Green 
            End If 
        End With 
    Next 
  
End Sub

Mis à jour le 30 octobre 2013 bidou

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Responsable bénévole de la rubrique Microsoft DotNET : Hinault Romaric -