Auto-largeur de la zone de liste déroulante du contenu
Quelqu'un connais un moyen pour définir la ComboBox
's contenu de la largeur de la propriété autosize
Je ne veux pas le ComboBox
elle-même, l'ouverture d'un contenu.
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas l'utiliser directement.
Faire un truc
Première itérer sur tous les éléments de votre zone de liste déroulante, case à la largeur de tous les éléments en attribuant le texte d'une étiquette. Ensuite, vérifiez la largeur de tous les temps, si la largeur de l'élément courant devient plus grand que les précédents éléments, puis modifier la largeur maximale.
OU
Comme suggéré par stakx, vous pouvez utiliser
TextRenderer
classelabel1.PreferredWidth
déjà calculé correctement à droite après le réglage delabel1.Text
? (Après tout, l'INTERFACE utilisateur n'obtiendrez pas une chance de mettre à jour lui-même alors que ce code est en cours d'exécution. Je me rends compte quelabel1
n'est pas ajouté à n'importe quelle forme, mais quand même... je suis surpris que cela devrait fonctionner.)label1.Width
mais ça ne fonctionnait pas, car il n'a pas été ajouté à l'INTERFACE utilisateur. Donc, j'ai utilisélabel1.PreferredWidth
. 🙂label1.PreferredWidth
pourrait fonctionner très bien, un peu plus direct et le plus "expressive" façon de mesurer la largeur du texte serait d'utiliserTextRenderer.MeasureText
...?maxWidth = myCombo.Width;
en place demaxWidth = 0
.obj.ToString()
n'est pas un texte correct de liaison de données (listes déroulantes.comboBox1.DropDownWidth = comboBox1.Items.Cast<string>().Max(x => TextRenderer.MeasureText(x, comboBox1.Font).Width);
obj.ToString()
peut être différente de laDisplayMember
propriété de la zone de liste déroulante.myCombo.GetItemText(obj)
est certainement plus correct que les autres réponsesGetItemText
:comboBox1.DropDownWidth = comboBox1.Items.Cast<object>().Max(o => TextRenderer.MeasureText(comboBox1.GetItemText(o), comboBox1.Font).Width);
Ici est très élégant. Il suffit de s'abonner à votre zone de liste déroulante à ce gestionnaire d'événement:
Ce code a été prise à partir de la codeproject: Ajuster de zone de liste déroulante liste déroulante de la largeur de la chaîne la plus longue largeur.
Mais j'ai modifié pour qu'il fonctionne avec comboboxes rempli avec toutes les données (pas seulement des chaînes de caractères).
Graphics
droit d'instance après utilisation, le meilleur en l'enveloppant à l'intérieur d'unusing
bloc.obj.ToString() ne fonctionne pas pour moi, je suggère l'utilisation de myCombo.GetItemText(obj). Cela fonctionne pour moi:
myCombo.GetItemText(obj)
est certainement plus correct que les autres réponses.obj.ToString()
peut être différente de laDisplayMember
propriété de la zone de liste déroulante.Essentiellement le même code que dans Javed Akram seconde suggestion, mais la largeur de la barre de défilement verticale est ajouté:
Utiliser le code comme ceci (sur un formulaire avec une liste déroulante avec le nom myComboBox):
C'est une vieille question, mais je viens de tomber sur elle et combiné d'un couple de réponses pour ma solution. J'ai aimé la simplicité de la accepté de répondre mais je voulais quelque chose qui pourrait fonctionner avec n'importe quel type d'objet dans la liste déroulante. Je voulais aussi faire usage de la méthode à travers une méthode d'extension.
De cette façon, si ma classe est:
J'ai pu le réglage automatique de la liste déroulante zone de liste déroulante de la largeur comme ceci:
Vieux mais classique, l'espoir de travailler assez vite
Voter pour algreat la réponse ci-dessous.
J'ai simplement modifié algreat de réponse avec le code redimensionner l'ensemble de contrôle.
J'aurais juste ajouté ça comme commentaire mais je ne pouvais pas ajouter de code mis en forme sur le commentaire.