Bonjour à tous,
Lors du chargement de mes lignes dans une listBox, je voudrais afficher certaines lignes en couleurs.
Je charge ma listBox par programme en C# de la manière suivante :
Comment faire ? Peut on appliquer des codes couleurs sur un string ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 string sRequete = string.Format("SELECT ..."); try { cConnexion.OpenConnexion(cGlobal.ChaineConnexion, ref sqlCnx); } catch (Exception ex) { cUtil.MessageBoxErreur(ex.Message); return; } SqlDataReader dr = null; try { if (cDataAccess.bExecuteReader(sRequete, sqlCnx, ref dr)) { string Ligne = ""; while (dr.Read()) { Ligne = dr[0].ToString(); codecouleur = dr[1].ToString(); listBox1.Items.Add(Ligne); } }
J'ai trouvé qu'on ne peut pas appliquer de code couleur aux string mais uniquement sur des contrôles.
J'ai également trouvé qu'il fallait abonner la listBox à un événement DrawItem de la manière suivante :
et enfin j'ai trouvé un exemple de fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 listBox1.DrawItem += new DrawItemEventHandler(listBox1_DrawItem);
Le problème c'est que dans cet exemple la couleur s'applique en fonction du rang de la ligne dans la listbox, hors moi je voudrais l'appliquer en fonction du codecouleur qui m'est renvoyé dans le SELECT pour chacune de mes lignes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 private void listBox1_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e) { // Draw the background of the ListBox control for each item. e.DrawBackground(); // Define the default color of the brush. Brush myBrush = Brushes.Purple; // Determine the color of the brush to draw each item based on the index of the item to draw. switch (e.Index) { case 1: myBrush = Brushes.Red; break; case 2: myBrush = Brushes.Orange; break; case 3: myBrush = Brushes.Purple; break; } e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, myBrush, e.Bounds, StringFormat.GenericDefault); }
Comment passer cette information à la fonction ?
Ou alors, ce que je veux faire est il plus facilement réalisable en passant par une listView ?
Merci d'avance de votre aide.
Partager