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