(ListView?) – Contrôle comme dans l’Explorateur Windows

Je me demande s’il existe un moyen de créer un contrôle comme celui-ci dans le démarrage automatique de l’explorateur Windows lorsque vous twigz un périphérique.

entrez la description de l'image ici

J’avais pensé que cela pourrait être un contrôle de liste de manière plus ou moins modifiée, mais je n’ai rien trouvé avec Google. J’ai également vérifié de nombreuses pages CodeProject.

Quelqu’un a-t-il une idée d’où je pourrais obtenir le contrôle ou comment je pourrais en fabriquer un moi-même? (Je ne suis pas si bon avec OwnerDraw: P)

Merci.

En réalité, modifier un ListView n’est pas plus facile que le propriétaire le dessine. Voici un exemple qui montre à quel point c’est simple.

Vous venez de scripter un événement ( DrawItem ) et vous avez terminé.

Ce morceau de code suppose:

  • La vue du LV est définie sur Liste
  • Vous avez ajouté une ImageList appropriée à votre formulaire
  • OwnerDraw du LV est défini sur true
  • Vous avez ajouté deux colonnes pour contenir le texte affiché dans les deux étiquettes.
  • Vous avez fait la 1ère colonne assez large pour contenir tout le truc qui est dessiné
  • Vous avez créé la taille de police Fonts du LV aussi grande que la hauteur des images (disons 32).
  • Atsortingbuer les valeurs ImageIndex appropriées aux éléments du volume virtuel

 private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e) { Point point0 = new Point(e.Bounds.Left, e.Bounds.Top); Point point1 = new Point(imageList1.ImageSize.Width + 10, e.Bounds.Top + 5); Point point2 = new Point(imageList1.ImageSize.Width + 10, e.Bounds.Top + 25); Size size = new Size(listView1.ClientRectangle.Width, e.Bounds.Height); Rectangle R = new Rectangle(point0, size); Font F1 = new Font(listView1.Font.FontFamily, 11f, FontStyle.Bold); Font F2 = new Font(listView1.Font.FontFamily, 10f); if (e.Item.Focused) e.Graphics.FillRectangle(Brushes.LightBlue, R); else if (e.ItemIndex % 2 == 1) e.Graphics.FillRectangle(Brushes.GhostWhite, R); e.Graphics.DrawImage(imageList1.Images[e.Item.ImageIndex], point0 ); e.Graphics.DrawSsortingng(e.Item.Text, F1, Brushes.Black, point1); e.Graphics.DrawSsortingng(e.Item.SubItems[1].Text, F2, Brushes.Black, point2); F1.Dispose(); F2.Dispose(); } 

Notez que j’ai codé en dur quelques couleurs pour peindre chaque ligne ainsi que l’élément ciblé. Ces couleurs doivent vraiment utiliser les couleurs système respectives. Ceux-ci viennent à l’esprit:

  SolidBrush brush0 = new SolidBrush(SystemColors.ControlLight); SolidBrush brush1 = new SolidBrush(SystemColors.Highlight); 

J’utilise la police affectée au LV mais avec des tailles modérées. Évidemment, plus ou moins, tout, en particulier les divers décalages, peut être configuré à votre guise. Mais utiliser les couleurs de la collection System.Colors est un bon moyen de restr en phase avec les thèmes Windows de vos utilisateurs.