Combobox avec des items grisés

Soyez le premier à donner votre avis sur cette source.

Vue 15 558 fois - Téléchargée 1 044 fois

Description

Ce contrôle est simplement dérivé de Combobox et il permet de griser des éléments dans la liste déroulante.
Son utilisation est identique à celle de sa classe parente : il suffit de le déposer sur un Form ...

Conclusion :


... Ce type de contrôle existe peut-être déjà (j'ai pas cherché) ...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
14759
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 septembre 2020
433
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
Messages postés
14759
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 septembre 2020
433
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.