VB2008 ListView Ligne de couleur alternée [Résolu]

Messages postés
45
Date d'inscription
mercredi 26 mars 2008
Statut
Membre
Dernière intervention
17 août 2012
- - Dernière réponse : Fabasia
Messages postés
45
Date d'inscription
mercredi 26 mars 2008
Statut
Membre
Dernière intervention
17 août 2012
- 5 juin 2011 à 16:51
J'aimerais pourvoir alterner la couleur des lignes d'un listview.

En agissant sur les propriété, ListView.Items(index).BackColor Color.xxx , ListView.Items(index).ForeColor Color.xxx ,on n'agit que sur le texe de l'item et pas sur toute ligne.

Comment faire pour colorer toute la ligne ?

En fouillant, j'ai trouvé qu'il était possible d'utiliser IValueConverter, mais a chaque fois il y a du code en XAML. Peut-on utiliser du XAML en VB (pas WPF) et si oui comment faire ?

Peut-être une autre méthode ?

Merci
Afficher la suite 

4 réponses

Meilleure réponse
3
Merci
Salut,
La propriété OwnerDraw du contrôle ListView devrait être mise sur True.
Ensuite, on se sert des événements DrawItem, DrawSubItem et DrawColumnHeader pour des dessins personnalisés sur la ListView.
On ajoute aussi une petite variable que l'on incrémente et dont on teste le modulo pour alterner les couleurs de la ligne.
Pour illustrer ce commentaire, voici un petit exemple :
Public Class Form1
    Dim alterne As Integer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim strItem() As String = {"tata", "titi", "toto", "tutu"}
        Dim strSubItem() As String = {"mama", "mimi", "momo", "mumu"}
        With ListView1
            .View = View.Details
            .OwnerDraw = True
            .Columns.Add("T", 200, HorizontalAlignment.Left)
            .Columns.Add("M", 200, HorizontalAlignment.Left)
            For x = 0 To strItem.Length - 1
                Dim item As New ListViewItem(strItem(x))
                item.SubItems.Add(strSubItem(x))
                .Items.Add(item)
            Next
        End With
    End Sub

    Private Sub ListView1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawListViewItemEventArgs) Handles ListView1.DrawItem
        alterne += 1
        If alterne Mod 2 = 0 Then
            e.Graphics.FillRectangle(Brushes.CornflowerBlue, e.Bounds)
        Else
            e.Graphics.FillRectangle(Brushes.SteelBlue, e.Bounds)
        End If
        e.DrawText()
    End Sub

    Private Sub ListView1_DrawSubItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawListViewSubItemEventArgs) Handles ListView1.DrawSubItem
        If alterne Mod 2 = 0 Then
            e.Graphics.FillRectangle(Brushes.CornflowerBlue, e.Bounds)
        Else
            e.Graphics.FillRectangle(Brushes.SteelBlue, e.Bounds)
        End If
        e.DrawText()
    End Sub

    Private Sub ListView1_DrawColumnHeader(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawListViewColumnHeaderEventArgs) Handles ListView1.DrawColumnHeader
        e.DrawDefault = True
    End Sub
End Class

Bonne soirée.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Utilisateur anonyme
Messages postés
6069
Date d'inscription
dimanche 13 avril 2003
Statut
Modérateur
Dernière intervention
15 juillet 2011
21
3
Merci
Salut,
Voici le code en c#, il reste a l'adapté.

((e.ItemIndex & 1) 0 --> (e.ItemIndex Mod 2 0)

protected override void OnDrawItem(DrawListViewItemEventArgs e)
{

if ((e.ItemIndex & 1)==0 )
{
e.Item.BackColor = m_BackGroundStripe1Colour;
}
else
{
e.Item.BackColor = m_BackGroundStripe2Colour;
}

e.DrawDefault = true;
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de nhervagault
0
Merci
Ah oui tiens j'avais pas pensé a ItemIndex ce qui rend ma variable "alterne" inutile. Merci nhervagault
Commenter la réponse de Utilisateur anonyme
Messages postés
45
Date d'inscription
mercredi 26 mars 2008
Statut
Membre
Dernière intervention
17 août 2012
0
Merci
Meci à tous les 2
Commenter la réponse de Fabasia