Afficher différentes couleurs dans une ligne de list [Résolu]

Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention - 12 sept. 2011 à 11:00 - Dernière réponse : Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention
- 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
Afficher la suite 

8 réponses

Répondre au sujet
NHenry 14131 Messages postés vendredi 14 mars 2003Date d'inscription 21 avril 2018 Dernière intervention - 13 sept. 2011 à 18:53
+3
Utile
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
---
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de NHenry
NHenry 14131 Messages postés vendredi 14 mars 2003Date d'inscription 21 avril 2018 Dernière intervention - 12 sept. 2011 à 12:55
0
Utile
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
---
Commenter la réponse de NHenry
Whismeril 11409 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 21 avril 2018 Dernière intervention - 12 sept. 2011 à 17:41
0
Utile
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
Commenter la réponse de Whismeril
Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention - 12 sept. 2011 à 17:56
0
Utile
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
Commenter la réponse de Hermios
Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention - 13 sept. 2011 à 17:51
0
Utile
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
Commenter la réponse de Hermios
Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention - 14 sept. 2011 à 11:00
0
Utile
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
Commenter la réponse de Hermios
Hermios 265 Messages postés dimanche 14 avril 2013Date d'inscription 23 mai 2014 Dernière intervention - 14 sept. 2011 à 16:11
0
Utile
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
Commenter la réponse de Hermios
Whismeril 11409 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 21 avril 2018 Dernière intervention - 13 sept. 2011 à 19:38
-2
Utile
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
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.