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 :

Couleur texte combobox dropdownlist


Sujet :

C#

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 3
    Par défaut Couleur texte combobox dropdownlist
    Bonjour à tous,
    Je viens chercher le professionnel du codage pour résoudre un problème
    J'ai créé une fonction qui remplit une combobox passée en paramètre avec les éléments d'une table SQL(chargée dans un dataset).
    Dans cette table, j'ai un champ (HCB_Component) qui contient le nom de la combobox à charger. Ainsi ma fonction charge toutes les lignes de la table qui correspondent à la combobox transmise en paramètre. Vous me suivez ?
    Cette table contient plusieurs colonnes contenant les informations à afficher dans la combobox en fonction de la langue choisie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            public static void LoadTranslatedComboBoxItems(Control ComboBoxToLoad, Boolean ActiveTranslation, String Language)
            {
     
                DataTable DTFilteredComboboxTable = GetFilteredTable( DIForm.frmMain.dsMachine.Tables["T_HMIComboBox"], "HCB_component = '" + ComboBoxToLoad.Name + "'", "HCB_Index ASC");
                ((ComboBoxPerso.ComboBox_Perso)ComboBoxToLoad).DataSource = new BindingSource(DTFilteredComboboxTable, null);
                if (ActiveTranslation)((ComboBoxPerso.ComboBox_Perso)ComboBoxToLoad).DisplayMember = "HCB_" + Language;
                else
    ((ComboBoxPerso.ComboBox_Perso)ComboBoxToLoad).DisplayMember = "HCB_English";
     
                ((ComboBoxPerso.ComboBox_Perso)ComboBoxToLoad).ValueMember = "HCB_English";
     
            }
    Grâce à la propriété DisplayMember, j'affiche la colonne correspondant à la langue souhaitée. Jusque là, tout va bien, et la fonction remplit parfaitement son rôle!
    Mon problème est le suivant, la combobox qui reçoit les informations est en mode dropdownlist, et le texte de l'élément sélectionné est en noir.


    La vous, vous dites : " Je ne vois pas le rapport !"
    Et bien figurez vous que le seul moyen de modifier la couleur du texte est d'ajouter l'événement DrawItem (dans le control combobox), comme indiqué ci-dessous :

    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
            public ComboBox_Perso()
            {
                InitializeComponent();
     
                this.DrawItem += new DrawItemEventHandler(DisplayCombo_DrawItem);
                // Required for ownerdraw
                this.DrawMode = DrawMode.OwnerDrawFixed;
            }
     
            // Ownerdraw routine
            void DisplayCombo_DrawItem(object sender, DrawItemEventArgs e)
            {
                System.Drawing.Graphics g = e.Graphics;
                Rectangle r = e.Bounds;
     
                if (e.Index >= 0)
                {
                    string label = this.Items[e.Index].ToString();
     
                    // This is how we draw a disabled control
                    if (e.State == DrawItemState.Disabled)
                    {
                        e.Graphics.FillRectangle(new SolidBrush(Color.White), r);
                        g.DrawString(label, e.Font, new SolidBrush(Color.DarkGray), r);
                        e.DrawFocusRectangle();
                    }
                    // This is how we draw the items in an enabled control that aren't in focus
                    else 
                    {
                        e.Graphics.FillRectangle(new SolidBrush(Color.White), r);
                        g.DrawString(label, e.Font, new SolidBrush(this.ForeColor), r); // <===== La couleur que je veux appliquer au texte de la combobox
                        e.DrawFocusRectangle();
                    }
     
                }
                g.Dispose();
     
     
            }
    Cette fonctionnalité modifie bien la couleur du texte de ma combo MAIS les informations affichées dans ma combo sont toutes maintenant à : System.Data.DataRowView



    Cette erreur est liée à cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string label = this.Items[e.Index].ToString();
    Mais je ne sais pas comment récupérer le DisplayMember de la combo qui était préalablement paramétrée.

    Bon voilà, j'espère avoir été assez clair
    Mais si je dois résumer :
    Comment modifier la couleur du texte d'une combobox remplie grâce à une datasource et dont la valeur affichée correspond à une colonne sélectionnée par la propriété DisplayMember qui peut varier selon le language sélectionné ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Par défaut
    Salut,

    Un petit début de piste pour (peut-être, je n'ai pas testé) retrouver la ligne du DataTable qui va bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string label = this.Items[e.Index].DataView.Table.Rows[e.Index][index ou nom colonne qui va bien].ToString();
    Reste à trouver la colonne qu'il faut, mais sans savoir ce que fait exactement GetFilteredTable je ne peux pas aller plus loin !

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 3
    Par défaut
    Merci pour ce premier retour.
    Oui c'est un peu ce que je cherche. J'ai tenté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string label = this.Items[e.Index].DataView.Table.Rows[e.Index][this.DisplayMember].ToString();
    Bon là, ça ne fonctionne pas vraiment, je ne peux compiler, le message d'erreur est : "'objet' ne contient pas une définition pour 'Dataview' et aucune méthode d'extension 'Dataview' acceptant un premier argument de type 'object' n'a été trouvé.
    Mais c'est vraiment une syntaxe de ce genre auquel je m'attends
    Quant à la fonction GetFilteredTable(), elle est là pour retourner une table ne comprenant QUE les enregistrements qui concernent la combobox envoyée en paramètre.
    En fait, dans une même table, je stocke tous les éléments de toutes les combobox de l'application pour facilité les traductions. AVec cette fonction, je ne garde que les éléments nécessaires à la combo en cours.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            public static DataTable GetFilteredTable( DataTable sourceTable, string selectFilter, string SortParameter)
            {
                var filteredTable = sourceTable.Clone();
                var rows = sourceTable.Select(selectFilter, SortParameter);
                foreach (DataRow row in rows)
                {
                    filteredTable.ImportRow(row);
                }
                return filteredTable;
            }

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Par défaut
    Oups oui j'ai oublié le cast
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string label = ((DataRowView)this.Items[e.Index]).DataView.Table.Rows[e.Index][index ou nom colonne qui va bien].ToString();

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 3
    Par défaut
    Comment dire .... Jaco ..... T'es un chef !!!!!!!!!!
    Tu m'enlèves une belle épine du pied !!
    Merci beaucoup !

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 93
    Par défaut
    De rien

    N'oublie pas le bouton "résolu" !

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

Discussions similaires

  1. [CSS]Changer couleur texte à partir d'une limite horizontale
    Par mathieu7497 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 14/04/2006, 23h34
  2. Changement couleur fond et couleur texte au passage souris
    Par Jiraiya42 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 12
    Dernier message: 01/02/2006, 14h18
  3. couleurs texte application console
    Par Jahjouh dans le forum MFC
    Réponses: 3
    Dernier message: 02/01/2006, 14h06
  4. [langage] Couleur texte
    Par claire14pb dans le forum Langage
    Réponses: 28
    Dernier message: 26/05/2005, 15h58
  5. [C#] [WinForms] ComboBox DropDownList
    Par RobinJulie dans le forum Windows Forms
    Réponses: 7
    Dernier message: 13/10/2004, 11h02

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