COMBOBOX AVEC DES ITEMS GRISÉS

Utilisateur anonyme - 25 févr. 2009 à 22:29
 Utilisateur anonyme - 14 avril 2010 à 18:22
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/36863-combobox-avec-des-items-grises

Utilisateur anonyme
14 avril 2010 à 18:22
Bonsoir c'est encore moi

Mon appli tourne depuis longtemps, mais des utilisateurs se sont plein de la difficulté à lire l'élément survolé par la sourie quand la liste est déroulée.
En effet, c'est écrit en noir sur fond bleu foncé.

J'ai donc modifié à nouveau l'événement Cb_DrawItem de la sorte:

private void Cb_DrawItem (object sender, DrawItemEventArgs e)
{
if (e.Index == -1) { return; }

//Dessine la liste déroulante du combobox :
mi = e.Index;
if (mHidenItem.IndexOf(mi) < 0)
{
// L'élement est accessible

//Si la souris survole l'élément dans la dropdowmlist
if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
{
//Dessine le rectangle de sélection avec une couleur choisie, sinon utiliser e.DrawBackground();
e.Graphics.FillRectangle(Brushes.Blue, new Rectangle(e.Bounds.Location, e.Bounds.Size));

//Ecrit la valeur ToString de l'élément avec une couleur choisie
mColor = Color.White;
}
else
{
e.DrawBackground();
mColor = ForeColor;
}

mFont = Font;
}
else
{
// L'élément est grisé :
mColor = Color.DarkGray;
mFont = mFontGrise;
}
e.Graphics.DrawString(Items[mi].ToString(), mFont, new SolidBrush(mColor), e.Bounds.Height - 16, e.Bounds.Y);

}


Le texte apparait en blanc sur fond bleau clair

Cordialement

Whismeril
Utilisateur anonyme
25 févr. 2009 à 22:29
Bonsoir, j'utilise votre combobox pour une application personnelle.
C'est vraiment trés bien.
J'ai cependant trouvé un petit bug, lorsque l'on veut passer la propriété "DropDownStyle" à la valeur "DropDownList", la class léve l'exeption "valeur Index -1 non valide" pour la propriété Cb_DrawItem, ligne 116.

Je l'ai résolu comme suit,étant débutant il y a probablement mieux...

private void Cb_DrawItem(object sender, DrawItemEventArgs e)
{
if (!(e.Index == -1))
{
//Dessine la liste déroulante du combobox :
mi = e.Index;
if (mHidenItem.IndexOf(mi) < 0)
{
// L'élement est accessible
e.DrawBackground();
mColor = ForeColor;
mFont = Font;
}
else
{
// L'élément est grisé :
mColor = Color.DarkGray;
mFont = mFontGrise;
}
e.Graphics.DrawString(Items[mi].ToString(), mFont, new SolidBrush(mColor), e.Bounds.Height - 16, e.Bounds.Y);
}
}

Cordialement
Whismeril
Rejoignez-nous