Custom combobox / personnaliser un combobox

Description

Custom ComboBox C#

Il y a plusieurs questions sur le forum au sujet de la personnalisation d'une ComboBox. Comme je n'ai pas trouvé d'exemple sur le site, je propose un petit morceau de code relativement simple qui permet "d'améliorer" quelque peu ce Control :

Il permet d'afficher des éléments en couleur, en gras, avec une image, changer la sélection de couleur, la couleur de fond d'un élément, rendre des éléments disabled, etc. On peut très simplement rajouter d'autres critères, au gré des besoins.

Source / Exemple :


private void FillCustomCombo() 
{ 
            // Add special item (color)
            this.customCbImgFix.Items.Add(new ComboBoxItem("Elément spécial", Color.Red, false));
            // Add normal item (ToString is used)
            this.customCbImgFix.Items.Add("Premier élément normal");
            // Add special item (image, couleur)
            ComboBoxItem cbi4 = new ComboBoxItem("Elément spécial", Color.DarkBlue, true);
            cbi4.IndexImageList = 0;
            this.customCbImgFix.Items.Add(cbi4);
            // Add normal item (ToString is used)
            this.customCbImgFix.Items.Add("Deuxième élément normal");
            // Add normal item (ToString is used)
            this.customCbImgFix.Items.Add("Troisième élément normal");
            // Add special item (image)
            ComboBoxItem cbi5 = new ComboBoxItem();
            cbi5.DisplayName = "Elément spécial";
            cbi5.IndexImageList = 1;
            cbi5.IsEnabled = false;
            this.customCbImgFix.Items.Add(cbi5);
            // Add special item (bold)
            this.customCbImgFix.Items.Add(new ComboBoxItem("Elément spécial", Color.Black, true));
            // Add normal item (ToString is used)
            this.customCbImgFix.Items.Add("Quatrième élément normal");
            // Add special item (backColor, foreColor)
            ComboBoxItem cbi6 = new ComboBoxItem("Elément spécial", Color.Red, false);
            cbi6.BackColor = Color.Beige;
            this.customCbImgFix.Items.Add(cbi6);
            ComboBoxItem cbi7 = new ComboBoxItem();
            cbi7.DisplayName = "Elément spécial";
            cbi7.BackColor = Color.Beige;
            this.customCbImgFix.Items.Add(cbi7);
            ComboBoxItem cbi8 = new ComboBoxItem();
            cbi8.DisplayName = "Elément spécial";
            cbi8.BackColor = Color.Beige;
            this.customCbImgFix.Items.Add(cbi8);
            ComboBoxItem cbi9 = new ComboBoxItem();
            cbi9.DisplayName = "Elément spécial";
            cbi9.BackColor = Color.Beige;
            this.customCbImgFix.Items.Add(cbi9);
}

Conclusion :


Comme vous pouvez le constater, il y a deux Controls. Celui qui possède des ItemHeight différents pose un problème d'affichage quand il est en mode DropDownList. C'est pour cela que j'ai désactivé ce mode. Si quelqu'un sait comment faire pour dessiner soit-même dans la zone de text, je suis preneur !

Codes Sources

A voir également

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.