IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

changement de couleur police listview


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 576
    Par défaut changement de couleur police listview
    Bonjour à tous,

    J'ai une listview WPF pour laquelle je cherche, en fonction d'un certain critere d'ajouter un élément dans ma liste (bleu ou rouge).
    Mais soit tout est bleu, soit tout est rouge.

    Voici le code que j'ai réalisé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            private void AddBleuString Mission)
            {
                ListViewDialogue.FontSize = 15;
                ListViewDialogue.FontStyle = FontStyles.Italic;
                ListViewDialogue.Foreground = Brushes.Blue;
                ListViewDialogue.FontFamily = new FontFamily("Tahoma");
                ListViewDialogue.Items.Add("J'ai écrit en bleu");
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
            private void AddRouge(String Mission)
            {
                ListViewDialogue.FontSize = 15;
                ListViewDialogue.FontStyle = FontStyles.Normal;
                ListViewDialogue.Foreground = Brushes.Red;
                ListViewDialogue.FontFamily = new FontFamily("Tahoma");
                ListViewDialogue.Items.Add("J'ai écrit en rouge");
            }
    Faut-il utiliser autre qu'une listView ? Mais en lisant dans certains forum, ils privilégient la ListView

    Quelqu'un pourrait il m'aider svp ?

    Merci d'avance pour votre aide précieuse

    Marsup

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    Il faut que toutes la liste soit en bleu ou rouge, ou tu peux avoir les 2 dans la même liste.
    Perso j'utiliserai un valueconverter pour la couleur du texte, tu peux crée un objet qui contient ton texte et une propriété couleur que tu bind à la listview et ton value converter utilisera cette propriété pour changer la couleur du texte.

  3. #3
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 103
    Par défaut
    Bonjour,

    Tu peux utiliser une listbox sans soucis.

    Il faut personnaliser l'evenement DrawItem et mettre la propriété DrawMode à OwnerDrawFixed

    par exemple :

    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
    27
    private void lb_Segments_DrawItem( object sender, DrawItemEventArgs e )
            {
                if(e.Index == -1)
                    return;
     
                Element theSegment = lb_Segments.Items[e.Index] as Element;
     
                    if(theSegment.Valid)
                    {
                        e.Graphics.FillRectangle( Brushes.DarkGreen, e.Bounds );
                        e.Graphics.DrawString( theSegment.ToString(), lb_Segments.Font, Brushes.White, e.Bounds );
                    }
                    else
                    {
                        e.DrawFocusRectangle();
                        e.Graphics.DrawString( theSegment.ToString(), lb_Segments.Font, Brushes.White, e.Bounds );
                    }
                }
                else
                {
                    if(theSegment.Valid)
                    {
                        e.Graphics.FillRectangle( Brushes.LightGreen, e.Bounds );
                    }
                    e.Graphics.DrawString( theSegment.ToString(), lb_Segments.Font, lb_Segments.ForeColor.ToBrush(), e.Bounds );
                }
            }

  4. #4
    Membre éclairé Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 576
    Par défaut
    Merci beaucoup Flow_75
    Par contre j'ai une erreur au niveau d Element. Faut-il rajouter un using paticulier ?

  5. #5
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 103
    Par défaut
    En faite, Element, c'est mon objet à moi.

    tu peux creer un objet et le mettre dans ta liste :

    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
     
    public class Elem
    {
        public Elem(string _Text, bool _bIsRed)
        {
                 Text = _Text;
                 bIsRes = _bIsRed;
        }
     
     
        public string Text {get;set;}
        public bool bIsRed {get;set;}
     
        public override string ToString()
        { 
                return Text;
         }
    }
    Cet element, tu le rajoutes à chaque fois dans ta liste.

    Dans le DrawItem, tu recupere l'element correspondant, et tu mets rouge ou vert

  6. #6
    Membre éclairé Avatar de marsupilami34
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 576
    Par défaut
    Je ne suis pas sur d'avoir tout compris.

    Ce que j'ai compris, c'est qu'il faillait créer l'evenement DrawItem.
    Lorsque je vais insérer un élément dans ma listbox, ca va déclencher cet évenement. (si j'ai bien compris)

    Et après je suis perdu
    Je ne sais pas ce que c'est segment.valid et je ne vois pas ou mettre mon critere :-(
    Mais le DrawItemEventArgs n'est pas reconnu.

  7. #7
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 103
    Par défaut
    En faite, segment, c'est une classe que j'ai réalisé moi meme donc, tu l'oublies c'est normal que la définition tu ne l'as pas.



    J'ai modifié mon code en conséquence.

    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
    27
    28
    29
     
     
    private void foo()
    {
    ... ...
     
    lb_Segments.Items.Add( new Elem("Text in red", true /* cet element sera rouge */));
    lb_Segments.Items.Add( new Elem("Text in blue", false /* cet element sera bleu */));
    ... ...
    }
     
    private void lb_Segments_DrawItem( object sender, DrawItemEventArgs e )
            {
                if(e.Index == -1)
                    return;
     
                Elem theElem = lb_Segments.Items[e.Index] as Elem; // ici, tu récuperes l'element dans la liste
     
                    if(theElem.bIsRed)
                    {
                        e.Graphics.FillRectangle( Brushes.Red, e.Bounds );
                        e.Graphics.DrawString( theElem.Text, lb_Segments.Font, Brushes.White, e.Bounds );
                    }
                    else
                    {
                        e.Graphics.FillRectangle( Brushes.Blue, e.Bounds );
                        e.Graphics.DrawString(theElem.Text , lb_Segments.Font, Brushes.White, e.Bounds );
                    }
                }

Discussions similaires

  1. Réponses: 4
    Dernier message: 22/04/2013, 19h30
  2. Changement de couleur : Police>Attribut
    Par shawn31 dans le forum Word
    Réponses: 2
    Dernier message: 16/01/2012, 01h08
  3. Pas de changement de couleur au clic dans une ListView
    Par profecie dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 02/11/2011, 17h57
  4. changement couleur polices plage avec liste
    Par michel13 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 17/04/2008, 18h08
  5. Changement de couleur de police sur une partie d'un caption
    Par kobe dans le forum Composants VCL
    Réponses: 3
    Dernier message: 11/07/2005, 10h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo