J'ai un datagridview code> avec un
ComboBox code> qui pourrait contenir de jolies chaînes. Y a-t-il un moyen d'avoir la liste déroulante se développer ou au moins wordwrap les chaînes afin que l'utilisateur puisse voir la chaîne entière sans que je doive redimensionner la largeur de la colonne
ComboBox p>
3 Réponses :
Non pas que je sache, bien que certains navigateurs soient suffisamment intelligents pour développer la largeur du menu déroulant au-delà de celle de la boîte si elle est nécessaire. Je sais que Firefox et Chrome peuvent le faire si vous êtes capable de contrôler un peu votre base d'utilisateurs. P>
Si vous êtes désespérément désespéré à quel point une boîte de liste déroulante basée sur Flash basée sur une boîte de liste déroulante sur HTML? P>
Cherchait une réponse WinForms. Je devrais ajouter des winforms à la question. Désolé pour la confusion.
Voici ce que j'ai fait pour résoudre ce problème, ça marche génial ...
Merci. J'ai choisi de modifier la propriété DropdownWidth dans l'événement déroulant.
Cela pourrait être une meilleure idée de vous abonner à DataSourCechanged code>,
ValueMemberCommé code> et
displaymemberchanged code> Événements au lieu de la protection de la propriété.
Puisqu'il s'agit d'un remplacement de classe, le moyen le plus propre est de simplement ajouter une substitution pour ondropdown code> pour ajouter l'appel là-bas avant d'exécuter
base.ondropdown (e) code>. Et BTW, pour cette finale
si> code> chèque, stockez simplement cette largeur dans une variable au lieu d'appeler ce calcul deux fois.
À propos, la chose "+15" à permettre à la barre de défilement peut être améliorée en vérifiant en réalité en vérifiant si elle est nécessaire et en récupérant la largeur réelle de la barre de défilement réelle: if (items.count * this.itemheight .Dropdownheight) WidestStringInpixels + = Systeminformation.verticalscrollBarwidth; code>
Ceci est une solution très élégante:
private void AdjustWidthComboBox_DropDown(object sender, System.EventArgs e) { ComboBox senderComboBox = (ComboBox)sender; int width = senderComboBox.DropDownWidth; Graphics g = senderComboBox.CreateGraphics(); Font font = senderComboBox.Font; int vertScrollBarWidth = (senderComboBox.Items.Count>senderComboBox.MaxDropDownItems) ?SystemInformation.VerticalScrollBarWidth:0; int newWidth; foreach (string s in senderComboBox.Items) { newWidth = (int) g.MeasureString(s, font).Width + vertScrollBarWidth; if (width < newWidth ) { width = newWidth; } } senderComboBox.DropDownWidth = width; }