Winforms – Comment alterner la couleur des lignes dans un contrôle ListView?

Utiliser C # Winforms (3.5).

Est-il possible de définir les couleurs des lignes pour alterner automatiquement dans une liste?

Ou dois-je définir manuellement la couleur de la ligne chaque fois qu’une nouvelle ligne est ajoutée à la vue de liste?

Basé sur un article MSDN, la méthode manuelle ressemblerait à ceci:

//alternate row color if (i % 2 == 0) { lvi.BackColor = Color.LightBlue; } else { lvi.BackColor = Color.Beige; } 

Je crains que ce soit le seul moyen dans Winforms. XAML le permet grâce à l’utilisation de styles.

Définissez la propriété ListView OwnerDraw sur true, puis implémentez le gestionnaire DrawItem:

  private void listView_DrawItem(object sender, DrawListViewItemEventArgs e) { e.DrawDefault = true; if ((e.ItemIndex%2) == 1) { e.Item.BackColor = Color.FromArgb(230, 230, 255); e.Item.UseItemStyleForSubItems = true; } } 

Cet exemple est simple, vous pouvez l’améliorer.

Autant que je sache, WPF permet de définir le style de tout contrôle à l’aide de Mais, dans les winforms, j’ai bien peur que ce soit le seul moyen.

Vous pouvez également tirer parti du dessin du propriétaire, plutôt que de définir explicitement les propriétés. Le dessin du propriétaire est moins vulnérable à la réorganisation des articles.

Voici comment procéder dans Better ListView (composant tiers proposant des versions à la fois gratuites et étendues) – il s’agit simplement de gérer un événement DrawItemBackground :

 private void ListViewOnDrawItemBackground(object sender, BetterListViewDrawItemBackgroundEventArgs eventArgs) { if ((eventArgs.Item.Index & 1) == 1) { eventArgs.Graphics.FillRectangle(Brushes.AliceBlue, eventArgs.ItemBounds.BoundsOuter); } } 

résultat:

entrez la description de l'image ici

Définissez la propriété ListView OwnerDraw sur true, puis implémentez le gestionnaire DrawItem. Regardez ici: Winforms – Comment alterner la couleur des lignes dans un contrôle ListView?

  for (int i = 0; i <= listView.Items.Count - 1; i = (i + 2)) { listView.Items[i].BackColor = Color.Gainsboro; } 

Définissez l’arrière-plan principal dans le menu des propriétés, puis utilisez ce code pour définir la couleur de remplacement.