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

Fabasia 45 Messages postés mercredi 26 mars 2008Date d'inscription 17 août 2012 Dernière intervention - 4 juin 2011 à 14:18 - Dernière réponse : Fabasia 45 Messages postés mercredi 26 mars 2008Date d'inscription 17 août 2012 Dernière intervention
- 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 

Votre réponse

4 réponses

Meilleure réponse
Utilisateur anonyme - 5 juin 2011 à 00:00
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.

Merci Utilisateur anonyme 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de Utilisateur anonyme
Meilleure réponse
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 5 juin 2011 à 00:14
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;
}

Merci nhervagault 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 92 internautes ce mois-ci

Commenter la réponse de nhervagault
Utilisateur anonyme - 5 juin 2011 à 00:37
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
Fabasia 45 Messages postés mercredi 26 mars 2008Date d'inscription 17 août 2012 Dernière intervention - 5 juin 2011 à 16:51
0
Merci
Meci à tous les 2
Commenter la réponse de Fabasia

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.