Manière de colorer des parties de la ligne Listbox / ListView dans C # WinForms?

  1. Existe-t-il un moyen de colorer des parties d’éléments ListBox (pas seulement la ligne entière)? Par exemple, l’élément de la boîte à liste se compose de 5 mots et un seul est coloré ou 3 sur 5.
  2. Est-il possible de faire la même chose avec ListView? (Je sais que ListView peut être coloré par colonne, mais j’aimerais avoir plusieurs couleurs dans une colonne).

Je ne suis intéressé que par les solutions gratuites, et ai préféré qu’elles ne soient pas lourdes à mettre en œuvre ou à modifier l’utilisation actuelle (le moins d’effort possible pour introduire une ListBox colorée au lieu d’une normale est préférable).

Cordialement,

Garçon furieux

Cet article explique comment utiliser DrawItem d’un ListBox avec DrawMode défini sur l’une des valeurs OwnerDraw. En gros, vous faites quelque chose comme ça:

listBox1.DrawMode = OwnerDrawFixed; listBox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBox1_DrawItem); private void listBox1_DrawItem(object sender, DrawItemEventArgs e) { e.DrawBackground(); e.DrawFocusRectangle(); // TODO: Split listBox1.Items[e.Index].ToSsortingng() and then draw each separately in a different color e.Graphics.DrawSsortingng(listBox1.Items[e.Index].ToSsortingng(),new Font(FontFamily.GenericSansSerif, 14, FontStyle.Bold),new SolidBrush(color[e.Index]),e.Bounds); } 

Au lieu d’un appel DrawSsortingng unique, scindez listBox1.Items [e.Index] .ToSsortingng () en mots et appelez DrawSsortingng séparément pour chaque mot. Vous devrez remplacer e.bounds par un emplacement x, y ou un rectangle de délimitation pour chaque mot.

La même approche devrait fonctionner pour ListView .

Aucune API intégrée ne prend en charge ce type de modification dans un ListBox ou un ListView WinForms. Il est certes possible d’y parvenir, mais la solution impliquera beaucoup de travaux de personnalisation et de substitution de WndProc. Ce sera une solution très complexe et lourde.

Si ce type d’expérience est important pour votre application, je pense que vous devriez considérer très sérieusement WPF comme une solution. WPF est conçu pour fournir ce type de bonbons pour les yeux et il existe probablement de nombreux échantillons sur le Web pour vous aider à démarrer.