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:
//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;
}
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);
}
}
14 avril 2010 à 18:22
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
25 févr. 2009 à 22:29
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