2017-01-29 1 views
0

Par exemple, si dans un listView je l'article:Comment colorer une partie de la chaîne de l'élément dans listView?

Hello world 

Je veux que Hello sera en rouge et dans le monde en vert

En haut de la forme que je l'ai fait

listView1.OwnerDraw = true; 

Dans le concepteur j'ai créé listView dessiner l'événement de l'élément:

private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e) { 
    e.DrawBackground(); 
    e.DrawFocusRectangle(); 
} 

Que faire d'ici? Ce que je veux faire est d'ajouter à Red couleur un mot à chaque élément à partir de son côté gauche par exemple:

`Hello world` 

Alors monde Hello world

Ainsi, le premier monde à gauche sera en rouge sur cette partie. Je veux ajouter ceci à tous les articles.

Répondre

0

Une façon d'y parvenir est par ListBox.DrawItem Event. Vous pouvez personnaliser le rendu de vos chaînes dans listbox dans cette fonction.

Ajouter un nouveau gestionnaire pour cet événement:

listBox1.DrawMode = DrawMode.OwnerDrawFixed; 
listBox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBox1_DrawItem); 

Et le rendu des textes font en listbox:

private void listBox1_DrawItem(object sender, DrawItemEventArgs e) 
{ 
    e.DrawBackground(); 
    e.DrawFocusRectangle(); 

    var itemStr = listBox1.Items[e.Index].ToString(); 
    var strings = itemStr.Split(' '); // Here I split item text 
    var bound = e.Bounds; 

    foreach (var s in strings) 
    { 
     var strRenderLegnth = e.Graphics.MeasureString(s, new Font(FontFamily.GenericSansSerif, 10)).Width; 

     e.Graphics.DrawString // Draw each substring with customized settings 
     (
      s, 
      new Font(FontFamily.GenericSansSerif, 10), 
      new SolidBrush(Color.Red), // Use verius colors for each substring 
      bound 
     ); 

     bound = new Rectangle(e.Bounds.X + (int)strRenderLegnth, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height); 
    } 
} 
+0

Assurez-vous de ne pas mélanger listbox et listview dans votre post! – TaW