Acceuil vb.net(513) Vb dot net et ListView
|
| Vb dot net et ListView |
2011-02-09 |
|
Comment colorier une cellule en mode Details
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 manoeuvre par programmation, voici un exemple:
Coloration en jaune de toute la première colonne d'un ListView1
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
Comment trier les colonnes d'une listview en cliquant sur leurs intitulés ?
---------------------------------------------------------------------------
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.
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 click sur les colonnes (événement ColumnClick) et d'instancier cette classe.
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érement si on compare des nombres par exemple.
Comment fait-on une liste d'objet avec le contrôle ListView ?
----------------------------------------------------------------------------------------
Dans l'exemple suivant, j'utilise des icones stockés dans un contrôle ImageList Partons du cas suivant :
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 :
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 :
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
Comment fait-on une liste détaillée avec un contrôle ListView ?
---------------------------------------------------------------------------------------------
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.
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:usertutos")
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
|
| Commentaires des visiteurs : |
|