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 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
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 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
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 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 14 avril 2024 655
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 19020 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 14 avril 2024 655
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
Rejoignez-nous