2 votes

C# : Vue LargeIcon de Listview : Élimination de l'espace entre les rangées

Je suis en train de construire un contrôle ListView personnalisé pour une application spécifique dans laquelle je dois afficher une galerie. Pour cela, j'utilise le processus de dessin du propriétaire pour dessiner manuellement les images dans le ListView.

Mes images dans ListView seront de 128x128 pixels, j'ai donc assigné un contrôle ImageList vide (avec des dimensions d'image de 128x128) comme liste d'images à ListView pour définir automatiquement la taille de l'élément.

enter image description here

Cela fonctionne bien pour moi jusqu'à présent. Mais j'ai besoin d'éliminer l'espace entre les lignes d'éléments (comme indiqué dans l'image d'exemple). Mon objectif est de faire en sorte que le listview personnalisé ressemble à une grille d'images. Je ne m'inquiète pas de l'espace à gauche et à droite des éléments, j'ai juste besoin d'éliminer l'espace entre les rangées pour que cela ressemble à une grille continue.

Toute aide est appréciée. Merci.

0voto

LarsTech Points 43510

En passant à la vue en mosaïque et en réalisant votre propre dessin, vous pouvez éviter le problème d'espacement des lignes :

listView1.TileSize = new Size(128, 128);
listView1.View = View.Tile;
listView1.OwnerDraw = true;
listView1.DrawItem += listView1_DrawItem;

et une simple routine de dessin :

private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e) {
  Color textColor = SystemColors.WindowText;
  if (e.Item.Selected) {
    if (listView1.Focused) {
      textColor = SystemColors.HighlightText;
      e.Graphics.FillRectangle(SystemBrushes.Highlight, e.Bounds);
    } else if (!listView1.HideSelection) {
      textColor = SystemColors.ControlText;
      e.Graphics.FillRectangle(SystemBrushes.Control, e.Bounds);
    }
  } else {
    using (SolidBrush br = new SolidBrush(listView1.BackColor)) {
      e.Graphics.FillRectangle(br, e.Bounds);
    }
  }

  e.Graphics.DrawRectangle(Pens.Red, e.Bounds);
  TextRenderer.DrawText(e.Graphics, e.Item.Text, listView1.Font, e.Bounds,
                        textColor, Color.Empty,
                        TextFormatFlags.HorizontalCenter | TextFormatFlags.VerticalCenter);
}

Résultat :

enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X