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 le fond de certain objet dans une Combox en la comparant à une liste


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 15
    Par défaut Colorer le fond de certain objet dans une Combox en la comparant à une liste
    Bonjour tout le monde.

    Voici mon problème, je développe actuellement une application fenêtre en C#, et je bloque sur un problème.

    J'ai une liste avec des noms de serveurs et une combox avec des noms de serveurs aussi.

    Le but de la manoeuvre serait de coloré le fond de chaque nom de serveur dans la combo box qui se trouverait à la fois dans la combo box et dans la liste.

    Pour cela, je fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        private void Coloration()
            {
                foreach (object item in Cbx_serveur.Items)
                {
                    foreach (object itembis in Lst_invisi.Items)
                    {
                        if (item.ToString() == itembis.ToString())
                        {
     
                        }
                    }
                }
            }
    Mais je ne sais pas quoi mettre dans mon if pour réaliser la coloration.

    Merci beaucoup d'avance pour vous êtes penché sur mon problème

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    il faut trapper l'evenement DrawItem et faire le boulot dedans

    sans oublier la propriété DrawMode en mode OwnerDrawFixed ou autre suivant besoin

    A ma connaissance, c'est la façon la plus rapide

    En 10 minutes, c'est normalement fait !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 15
    Par défaut RE
    Citation Envoyé par theMonz31 Voir le message
    il faut trapper l'evenement DrawItem et faire le boulot dedans

    sans oublier la propriété DrawMode en mode OwnerDrawFixed ou autre suivant besoin

    A ma connaissance, c'est la façon la plus rapide

    En 10 minutes, c'est normalement fait !
    Bonjour et merci de votre réponse

    Malheuresement je suis débutant en developpement .Net donc j'ai un peu de mal à saisir ce que vous voulez dire.

    Si vous pouviez me donner plus de piste, ça serait super.

    Merci d'avance

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    Le dessin des objets d'une combobox se fait dans la méthode DrawItem.

    Un evenement est dédié à celà dans la comboBox.

    Si tu passes la propriété de la comboBox DrawMode à celui que j'ai précise et que tu écoutes l'evenement DrawItem, tu rentreras dans le gestionnaire de l'évènement à chaque fois qu'il faudra faire un dessin d'un Item.

    imagines que tu as une form avec une combo et un bouton

    le code suivant fait ce que tu veux

    A adapter suivant tes besoins mais le principe y est
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    public partial class Form1 : Form
        {
            private List<string> serverList = new List<string>();
     
            public Form1()
            {
                InitializeComponent();
            }
     
            private void ServerCb_DrawItem(object sender, DrawItemEventArgs e)
            {
                string value = (string)ServerCb.Items[e.Index];
                Color bckColor = Color.White;
                if (serverList.Contains(value))
                {
                    bckColor = Color.LightSteelBlue;
                }
     
                SolidBrush br = new SolidBrush(bckColor);
                SolidBrush fontBr = new SolidBrush(Color.Black);
                e.Graphics.FillRectangle(br, e.Bounds);
                e.Graphics.DrawString(value, ServerCb.Font, fontBr, e.Bounds);
                fontBr.Dispose();
                br.Dispose();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                for (int i = 1; i < 10; i++)
                {
                    serverList.Add("serveur_" + i.ToString());
                }
     
                for (int i = 1; i < 16; i+=2)
    			{
                    ServerCb.Items.Add("serveur_"+ i.ToString());
    			}
            }
        }

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 15
    Par défaut RE
    Citation Envoyé par theMonz31 Voir le message
    Le dessin des objets d'une combobox se fait dans la méthode DrawItem.

    Un evenement est dédié à celà dans la comboBox.

    Si tu passes la propriété de la comboBox DrawMode à celui que j'ai précise et que tu écoutes l'evenement DrawItem, tu rentreras dans le gestionnaire de l'évènement à chaque fois qu'il faudra faire un dessin d'un Item.

    imagines que tu as une form avec une combo et un bouton

    le code suivant fait ce que tu veux

    A adapter suivant tes besoins mais le principe y est
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    public partial class Form1 : Form
        {
            private List<string> serverList = new List<string>();
     
            public Form1()
            {
                InitializeComponent();
            }
     
            private void ServerCb_DrawItem(object sender, DrawItemEventArgs e)
            {
                string value = (string)ServerCb.Items[e.Index];
                Color bckColor = Color.White;
                if (serverList.Contains(value))
                {
                    bckColor = Color.LightSteelBlue;
                }
     
                SolidBrush br = new SolidBrush(bckColor);
                SolidBrush fontBr = new SolidBrush(Color.Black);
                e.Graphics.FillRectangle(br, e.Bounds);
                e.Graphics.DrawString(value, ServerCb.Font, fontBr, e.Bounds);
                fontBr.Dispose();
                br.Dispose();
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                for (int i = 1; i < 10; i++)
                {
                    serverList.Add("serveur_" + i.ToString());
                }
     
                for (int i = 1; i < 16; i+=2)
    			{
                    ServerCb.Items.Add("serveur_"+ i.ToString());
    			}
            }
        }

    Merci beaucoup pour ce code, mais le problème désormais, c'est que je voudrais que l'élément soit colorer au load de la feuille, et j'ai plutôt l'impréssion que ce code est destiné à un evenement, du genre quand on clique sur le contrôle .

    Et par dessiner, tu entends ajouter une élément à la combo box?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 114
    Par défaut
    Bonjour,

    Non, non, par dessiner, il entend bien dessiner.
    A chaque fois que le visuel de l'application doit être (re)affiché, il appel la methode de dessin. (premier affichage, une autre fenêtre qui passe au dessus, un appel à invalidate(), etc...)

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 19/03/2014, 19h42
  2. Réponses: 3
    Dernier message: 16/07/2013, 00h48
  3. Réponses: 1
    Dernier message: 02/10/2010, 16h43
  4. Réponses: 4
    Dernier message: 01/05/2009, 15h41
  5. comparer une valeur de formulaire et une chaine de caractere.
    Par minirom dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 08/08/2006, 10h53

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