Afficher différentes couleurs dans une ligne de list

Résolu
Hermios
Messages postés
264
Date d'inscription
dimanche 14 avril 2013
Statut
Membre
Dernière intervention
23 mai 2014
- 12 sept. 2011 à 11:00
Hermios
Messages postés
264
Date d'inscription
dimanche 14 avril 2013
Statut
Membre
Dernière intervention
23 mai 2014
- 14 sept. 2011 à 16:11
Salut à tous,
J'aimerai pouvoir avoir différentes couleurs dans une listbox (ou listview, je suis pas difficile), mais sur une même ligne. En fait, ma listbox/listview contient, dans chaque item, une ligne de code, et j'aimerai faire une coloration syntaxique.
Je ne peux malheureusement pas travailler avec le rich text box (du moins pas uniquement), car il faut vraiment que mon contrôle ait un comportement de list (ajout/suppression/Selection de ligne par clavier/souris etc.)
Si quelqu'un peut me fournir du code, ou au moins une piste, ce serait super sympa.
Merci beaucoup

@+. Hermios

8 réponses

NHenry
Messages postés
14926
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
16 mai 2022
162
13 sept. 2011 à 18:53
Bonjour,

Pour voir les SubItems, il faut ajouter des colonnes dans la propriété Columns du ListView.

Sinon, à moins de dériver un contrôle ListBox ou ListView avec les ListViewItem et agir sur l'affichage, je ne vois pas.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
3
NHenry
Messages postés
14926
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
16 mai 2022
162
12 sept. 2011 à 12:55
Bonjour,

As-tu regardé la propriété BackColor (je crois) des ListViewItem et ListViewSubItems ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
0
Whismeril
Messages postés
17331
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
596
12 sept. 2011 à 17:41
Bonsoir,

J'ai posté ce combobox qui permet d'afficher un tooltiptext quand on survolle la liste déroulante avec la souris.
Afin de savoir à quel item se rapporte le tooltiptext, je colore le fond et la police.
Tu devrais pouvoir t'en inspirer.


Whismeril
0
Hermios
Messages postés
264
Date d'inscription
dimanche 14 avril 2013
Statut
Membre
Dernière intervention
23 mai 2014
2
12 sept. 2011 à 17:56
Salut à vous deux,
Merci de vos réponses
Pas trop eu le temps de regarder aujourd'hui, j'essaie de voir demain,
Merci en tout cas pour votre aide, c'est bien gentil! :)


@+. Hermios
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Hermios
Messages postés
264
Date d'inscription
dimanche 14 avril 2013
Statut
Membre
Dernière intervention
23 mai 2014
2
13 sept. 2011 à 17:51
Salut à vous deux,
Ben j'ai regardé, malheureusement, non, ce n'est pas ce que je veux :
Il faut que dans une MEME phrase, j'ai plusieurs couleurs différentes (P. ex., ce qui est entre guillemets en vert kaki, les parenthèses en rose fluo, enfin le truc classique et beau à voir, quoi!). Et j'ai besoin que ces phrases soient dans une liste (A priori listbox ou listview).
Je suis preneur pour toute solution, même la plus tordue, si ca rend pas un prgm trop lourd (Heu, si vraiment c'est pas propre, genre usine à gaz, ca m'embête aussi!)

Pour info, j'avais tenté avec des subitems, mais malheureusement, on ne les voit que dans la vue details, sous forme de tableau, et ca, ben ca me va pas.

Merci beaucoup de votre aide, dans tous les cas!


@+. Hermios
0
Hermios
Messages postés
264
Date d'inscription
dimanche 14 avril 2013
Statut
Membre
Dernière intervention
23 mai 2014
2
14 sept. 2011 à 11:00
Salut à vous deux,
Ben en fait... j'ai pris vos deux solutions : J'ai dérivé un listbox, et ajouté un event drawitem
Donc j'obtiens à peu près ce que je veux.
Cependant :
Je ne peux plus sélectionner les items. Y a un truc spécial à faire pour ca?
Y aurait pas une fonction pour connaitre la taille en pixel d'une lettre/d'un character?

Merci beaucoup en tout cas, ca me sera bien utile!


@+. Hermios
0
Hermios
Messages postés
264
Date d'inscription
dimanche 14 avril 2013
Statut
Membre
Dernière intervention
23 mai 2014
2
14 sept. 2011 à 16:11
Re,
En fait, j'ai trouvé :
1- Les items étaient sélectionnés, mais la sélection était invisible.
Pour rendre ca visible, il faut ajouter, lors de l'ajout d'item : e.drawbackground();
Tant que j'y suis, pour changer le background de l'item sélectionné :
if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
e = new DrawItemEventArgs(e.Graphics, e.Font, e.Bounds, e.Index,
e.State ^ DrawItemState.Selected,
e.ForeColor, Color.Red);

source : http://www.codeguru.com/csharp/csharp/cs_controls/custom/article.php/c13423

Pour connaitre la taille d'un groupe de charactères :TextRenderer.MeasureText(text,font).Width-5;
Le "-5", c'est "à vue" (Le measurement text donne une valeur un peu trop large).

Voilà, merci encore de votre aide



@+. Hermios
0
Whismeril
Messages postés
17331
Date d'inscription
mardi 11 mars 2003
Statut
Modérateur
Dernière intervention
17 mai 2022
596
13 sept. 2011 à 19:38
Bonsoir,
en bidouillant (de façon un peu bourin...) le code que je t'ai proposé:

            if (e.Index != -1)
            {
            

                //Si la souris survole l'ÈlÈment dans la dropdowmlist
                {
                    //Ecrit la valeur ToString de l'élément avec une couleur choisie
                    string mot = "Ce";
                    e.Graphics.DrawString(mot, e.Font, Brushes.Red, new PointF(e.Bounds.X, e.Bounds.Y));

                    mot = " texte";
                    e.Graphics.DrawString(mot, e.Font, Brushes.Blue, new PointF(e.Bounds.X + 20, e.Bounds.Y));

                    mot = " doit";
                    e.Graphics.DrawString(mot, e.Font, Brushes.Green, new PointF(e.Bounds.X + 40, e.Bounds.Y));

                    mot = " être";
                    e.Graphics.DrawString(mot, e.Font, Brushes.Coral, new PointF(e.Bounds.X + 60, e.Bounds.Y));

                    mot = " coloré.";
                    e.Graphics.DrawString(mot, e.Font, Brushes.Yellow, new PointF(e.Bounds.X + 80, e.Bounds.Y));
                }
            }


ça marche.

Il te reste à décomposer ton texte comme il faut et surtout à appliquer des décalages à e.Bounds.X cohérent de la taille de tes mots.

Whismeril
-2