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

Windows Forms Discussion :

Colorer des items d'une listbox


Sujet :

Windows Forms

  1. #1
    Membre actif Avatar de Altor
    Homme Profil pro
    Développeur C#.NeT / Administrateur S.I. en alternance / Étudiant CS2I à Nevers
    Inscrit en
    Septembre 2012
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur C#.NeT / Administrateur S.I. en alternance / Étudiant CS2I à Nevers
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 103
    Points : 235
    Points
    235
    Par défaut Colorer des items d'une listbox
    Coucou, c'est encore moi, un débutant vraiment naze

    J'ai trouvé quelques solutions pour colorer les objets de ma listbox, mais aucun ne fonctionne : j'ai toujours le soulignement d'erreur.

    En fait j'aimerais, en fonction du caractère de début de chaque objets de la liste, colorer. (c'est toujours pour mon client IRC afin de colorer les gradés)

    Mon code ressemble à ça, il me manque juste la fonction de coloration de la ligne :

    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
    Brush Owner = Brushes.Violet;
                Brush Protect = Brushes.Orange;
                Brush Op = Brushes.Red;
                Brush Halfop = Brushes.Green;
                Brush Voice = Brushes.Gray;
                for (int i = 0; i == UserList.Items.Count; i++)
                {
                    string usr = UserList.Items[i].ToString();
                    if (usr.StartsWith("~"))
                    {
                        // Couleur Owner
                    }
                    if (usr.StartsWith("&"))
                    {
                        // Couleur Protect
                    }
                    if (usr.StartsWith("@"))
                    {
                        // Couleur Op
                    }
                    if (usr.StartsWith("%"))
                    {
                        // Couleur HalfOp
                    }
                    if (usr.StartsWith("+"))
                    {
                       // Couleur Voice
                    }
                }
    J'avais essayé UserList.Items[i].ForeColor(Color.Gray); mais ça m'affiche une erreur
    Idem pour le code DrawItem avec le Brush : Je n'ai pas compris comment s'active cet évènement

    Merci d'avance à ceux qui m'aident

  2. #2
    Membre expérimenté
    Avatar de charouel
    Homme Profil pro
    Freelance
    Inscrit en
    Mars 2009
    Messages
    618
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2009
    Messages : 618
    Points : 1 454
    Points
    1 454
    Billets dans le blog
    9

  3. #3
    Membre actif Avatar de Altor
    Homme Profil pro
    Développeur C#.NeT / Administrateur S.I. en alternance / Étudiant CS2I à Nevers
    Inscrit en
    Septembre 2012
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur C#.NeT / Administrateur S.I. en alternance / Étudiant CS2I à Nevers
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 103
    Points : 235
    Points
    235
    Par défaut
    C'est un des sujet que j'ai essayer d'appliquer justement, mais comme j'suis pas très doué en Anglais j'ai du mal à comprendre comment approprier la solution.

    Et c'est l'évènement DrawItem que je comprend pas très bien aussi : quand est-ce qu'il se déclanche ?

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 233
    Points : 336
    Points
    336
    Par défaut
    Le problème est que pour une ListBox, les items sont des string : un string n'a pas de propriétés de couleurs, c'est son conteneur qui va définir sa couleur

    Pour éviter ce problème j'ai trouvé, en furetant sur l'Internet mondial, un palliatif : le ListView
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                foreach (ListViewItem item in listView1.Items)
                {
                    if (item.Text.StartsWith("t"))
                    {
                        item.ForeColor = Color.Blue;
                    }
                }
    Dans un ListView, le "texte" est contenu dans un objet ListViewItem qui lui a des propriétés qui héritent de la classe Control !

    (ne pas oublier de modifier la propriété listView1.View = View.List soit dans le code, soit par le designer)


    Edit : J'ai trouvé le même lien que cité plus haut par charouel !
    "Hope for the best, but prepare for the worst."

  5. #5
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Septembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 25
    Points : 51
    Points
    51
    Par défaut
    C'est cette solution (du deuxième post de StackOverFlow) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private void listView1_Refresh()
    {
        for (int i = 0; i < listView1.Items.Count; i++)
        {
            listView1.Items[i].BackColor = Color.Red;
            for (int j = 0; j < existingStudents.Count; j++)
            {
                if (listView1.Items[i].ToString().Contains(existingStudents[j]))
                {
                    listView1.Items[i].BackColor = Color.Green;
                }
            }
        }
    }

  6. #6
    Membre actif Avatar de Altor
    Homme Profil pro
    Développeur C#.NeT / Administrateur S.I. en alternance / Étudiant CS2I à Nevers
    Inscrit en
    Septembre 2012
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur C#.NeT / Administrateur S.I. en alternance / Étudiant CS2I à Nevers
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 103
    Points : 235
    Points
    235
    Par défaut
    Du coup j'vais utiliser une listview

    Et nouveau problème ! :o

    Voilà que j'ai plus rien dans la 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
    if (data.Split(' ')[1] == "353" && data.Split(' ')[4] == "#MyIRC")
                {
                    string name = data.Split(':')[2];
                    var list = name.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                    foreach (string values in list)
                    {
                        if (values == TB_Nick.Text) { /*Ajouté lors du JOIN*/ }
                        else {
                            ListViewItem nk = new ListViewItem(values);
                            UserList.Items.Add(nk); 
                        }
     
                    }
                    Ulist_Coloration();
                }

  7. #7
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Citation Envoyé par Altor Voir le message
    C'est un des sujet que j'ai essayer d'appliquer justement, mais comme j'suis pas très doué en Anglais j'ai du mal à comprendre comment approprier la solution.

    Et c'est l'évènement DrawItem que je comprend pas très bien aussi : quand est-ce qu'il se déclanche ?
    L'événement DrawItem, ou plus généralement les événement Draw..., sont les événements qui sont déclencher lorsque le contrôle est "dessiné" sur ton écran.

    Il te permettent normalement de redéfinir totalement la façon dont un contrôle est représenté visuellement à l'écran (tu peux très bien dessiner une femme à poil au lieu de ta liste si ça te fait plaisir).

    Après il faut maîtriser les techniques permettant de dessiner en .net, ce qui n'est pas forcément simple et rapide. D'un point de vue business, sauf dans le cadre de la création d'un nouveau contrôle, c'est rarement rentable d'un point de vue temps.

  8. #8
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 233
    Points : 336
    Points
    336
    Par défaut
    Citation Envoyé par Altor Voir le message
    Du coup j'vais utiliser une listview

    Et nouveau problème ! :o

    Voilà que j'ai plus rien dans la liste...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                listView1.Items.Add("test");
                listView1.Items.Add("bob");
     
                listBox1.Items.Add("test");
                listBox1.Items.Add("bob");
    Si c'est juste pour du texte, ça s'ajoute de la même façon qu'une ListBox
    "Hope for the best, but prepare for the worst."

  9. #9
    Membre actif Avatar de Altor
    Homme Profil pro
    Développeur C#.NeT / Administrateur S.I. en alternance / Étudiant CS2I à Nevers
    Inscrit en
    Septembre 2012
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur C#.NeT / Administrateur S.I. en alternance / Étudiant CS2I à Nevers
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 103
    Points : 235
    Points
    235
    Par défaut
    Ah bah pourquoi ça marche pas alors ? ça pue un peut l'erreur du débutant là x'D

  10. #10
    Membre actif Avatar de Altor
    Homme Profil pro
    Développeur C#.NeT / Administrateur S.I. en alternance / Étudiant CS2I à Nevers
    Inscrit en
    Septembre 2012
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur C#.NeT / Administrateur S.I. en alternance / Étudiant CS2I à Nevers
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 103
    Points : 235
    Points
    235
    Par défaut
    C'est bizarre ça, même avec des données random ça ne s'affiche pas. J'ai mis ça en évent Load :

    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
    private void Form1_Load(object sender, EventArgs e)
            {
                Random Alea = new Random();
                TB_Nick.Text = "MyIRC" + Alea.Next(99);
     
                UserList.Items.Add("+A");
                UserList.Items.Add("gjgjggk");
                UserList.Items.Add("~gkjgjgjgykg");
                UserList.Items.Add("dserwsrfx");
                UserList.Items.Add("&sertzrtfx");
                UserList.Items.Add("%iloyoyijg");
                UserList.Items.Add("rtzerazrqa");
                UserList.Items.Add("@uitilyhikjhjk");
     
     
            }
    Et rien n'est ajouté dans ma listview

  11. #11
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 233
    Points : 336
    Points
    336
    Par défaut
    Citation Envoyé par Altor Voir le message
    C'est bizarre ça, même avec des données random ça ne s'affiche pas. J'ai mis ça en évent Load :
    Tu as bien changé la propriété View de la ListView ?
    (Parce que moi, je n'ai aucun problème, j'ajoute les items dans le Load de ma form, j'ai aucun événement attaché à mon ListView non plus)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                UserList.HeaderStyle = ColumnHeaderStyle.None;
                UserList.Scrollable = true;
                UserList.View = View.Details;
                ColumnHeader header = new ColumnHeader();
                header.Width = UserList.Width - 10;
                header.Text = "";
                header.Name = "col1";
                UserList.Columns.Add(header);
    Pour que tout se retrouve verticalement (avec scrolling vertical)
    "Hope for the best, but prepare for the worst."

  12. #12
    Membre actif Avatar de Altor
    Homme Profil pro
    Développeur C#.NeT / Administrateur S.I. en alternance / Étudiant CS2I à Nevers
    Inscrit en
    Septembre 2012
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur C#.NeT / Administrateur S.I. en alternance / Étudiant CS2I à Nevers
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 103
    Points : 235
    Points
    235
    Par défaut
    Oui la propriété View à pour valeur Details

    edit

    Oh la vache mais je suis un gros nul en fait. J'avais pas compris que pour les listview fallait ajouter au moins 1 colonne. C'est bon ça marche, merci

  13. #13
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 233
    Points : 336
    Points
    336
    Par défaut
    Citation Envoyé par Altor Voir le message
    Oui la propriété View à pour valeur Details

    edit

    Oh la vache mais je suis un gros nul en fait. J'avais pas compris que pour les listview fallait ajouter au moins 1 colonne. C'est bon ça marche, merci
    Pour la vue en mode "Detail" oui, il faut une colonne
    "Hope for the best, but prepare for the worst."

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. inserer des items dans une listbox en JSP sous Netbeans
    Par carole yao dans le forum NetBeans
    Réponses: 0
    Dernier message: 08/05/2012, 20h26
  2. defilement automatique des items d'une listbox
    Par vinowan dans le forum Windows Forms
    Réponses: 5
    Dernier message: 31/03/2009, 14h49
  3. Supprimer des Items dans une ListBox.
    Par abouhossam dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 23/01/2009, 12h01
  4. Sélectionner des Items dans une ListBox
    Par berpi dans le forum Débuter
    Réponses: 3
    Dernier message: 07/02/2008, 23h56
  5. Réponses: 3
    Dernier message: 29/08/2006, 13h50

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