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:
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.
http://img15.hostingpics.net/pics/47...0507100247.png
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:
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
http://img15.hostingpics.net/pics/87...0507093546.png
Cette erreur est liée à cette ligne :
Code:
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 :roll:
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é ?8O