Ich habe eine DataGridView
mit einer ComboBox
drin, die einige ziemlich große Zeichenfolgen enthalten könnte. Gibt es eine Möglichkeit, die Dropdown-Liste selbst zu erweitern oder zumindest die Strings wordwrap, so dass der Benutzer die gesamte Zeichenfolge sehen kann, ohne dass ich die Spaltenbreite ComboBox
ändern muss?Wie die ComboBox Drop-Down-Liste Größe anpassen, um das größte Element passen?
Antwort
Hier ist, was ich dieses Problem zu lösen hat, funktioniert super ...
public class ImprovedComboBox : ComboBox
{
public ImprovedComboBox()
{
}
public object DataSource
{
get { return base.DataSource; }
set { base.DataSource = value; DetermineDropDownWidth(); }
}
public string DisplayMember
{
get { return base.DisplayMember; }
set { base.DisplayMember = value; DetermineDropDownWidth(); }
}
public string ValueMember
{
get { return base.ValueMember; }
set { base.ValueMember = value; DetermineDropDownWidth(); }
}
private void DetermineDropDownWidth()
{
int widestStringInPixels = 0;
foreach (Object o in Items)
{
string toCheck;
PropertyInfo pinfo;
Type objectType = o.GetType();
if (this.DisplayMember.CompareTo("") == 0)
{
toCheck = o.ToString();
}
else
{
pinfo = objectType.GetProperty(this.DisplayMember);
toCheck = pinfo.GetValue(o, null).ToString();
}
if (TextRenderer.MeasureText(toCheck, this.Font).Width > widestStringInPixels)
widestStringInPixels = TextRenderer.MeasureText(toCheck, this.Font).Width;
}
this.DropDownWidth = widestStringInPixels + 15;
}
}
Nicht, dass ich weiß, obwohl einige Browser schlau genug sind, die Breite des Dropdown-Menüs über das der Box hinaus zu erweitern, wenn es benötigt wird. Ich weiß, Firefox und Chrome können es tun, wenn Sie in der Lage sind, Ihre Benutzerbasis ein wenig zu kontrollieren.
Wenn Sie wirklich verzweifelt sind, wie wäre es mit einer Flash-basierten Combo-Box, die Daten zurück zu HTML schreibt?
War auf der Suche nach einer Winforms-Antwort. Ich sollte winforms zur Frage hinzufügen. Entschuldigung für die Verwirrung. –
Die meisten Browser tun dies automatisch ... – Nyerguds
Diese sehr elegante Lösung ist:
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 ((ComboBox)sender).Items)
{
newWidth = (int) g.MeasureString(s, font).Width
+ vertScrollBarWidth;
if (width < newWidth)
{
width = newWidth;
}
}
senderComboBox.DropDownWidth = width;
}
Passen Kombinationsfeld Dropdown-Liste Breite längste Zeichenfolge Breitehttp://www.codeproject.com/KB/combobox/ComboBoxAutoWidth.aspx
- 1. Wie findet man das größte Element eines Arrays bekannter Größe?
- 2. Anpassen Größe auf Schritte, um alle Felder passen
- 3. Größe der Höhe von UILabel anpassen, um Text zu passen
- 4. Größe der Daten anpassen, um in R Markdown zu passen
- 5. Größe der Seite anpassen, um auf eine Druckseite zu passen
- 6. Größe der Sechsecke berechnen, um in das Rechteck zu passen
- 7. Excel welches Element ist das größte?
- 8. Wie stelle ich die Breite der QComboBox auf das größte Element ein?
- 9. Anpassen eines ComboBox Dojo
- 10. HTML Größe ändern, um Bildschirmauflösung zu passen
- 11. CSS/Flexbox: Gleiche Breite wie das größte Element, wie Spalten
- 12. Größe der Website-Breite anpassen, um in Breite des iPad-Bildschirms zu passen
- 13. WPF: So passen Sie SelectionBoxItem in ComboBox
- 14. PyQt: Wie man ComboBox Items anpassen
- 15. Größe ändern Etikett auf Textmenge passen - Swift
- 16. ComboBox aktualisiert das ausgewählte Element nicht
- 17. Anpassen der QFileDialog-Verzeichnis-Combobox
- 18. Wie erzwingen Sie, dass alle li-Elemente in einer ul die gleiche Größe wie das größte Element haben, ohne eine feste Größe festzulegen?
- 19. Android Emulator Größe ändern, um auf meinen Bildschirm zu passen
- 20. C# Größe anpassen datagridview Spalten anpassen
- 21. , wie das verwenden, um das Element durch die ID
- 22. dynamisch die Größe mehrerer DIVs anpassen
- 23. Java - gebe das größte Element in beiden Arrays zurück
- 24. ComboBox: eine Schaltfläche auf jedem Element (um das Element aus der Liste zu löschen)
- 25. CATextlayer Größe von FONT ändern, um den Rahmen zu passen
- 26. Anpassen des Inhalts auf jedes Iphone passen
- 27. WPF ComboBox Wie binden Sie das ausgewählte Element in Code?
- 28. WinForms Toolstip Artikel Größe anpassen
- 29. Flex Dropdownliste itemrenderer Problem?
- 30. Pythonischer Weg, um das größte Element in einer Liste zu bekommen
Danke. Ich habe die DropDownWidth-Eigenschaft im DropDown-Ereignis geändert. –
Es könnte eine bessere Idee sein, für die Ereignisse "DataSourceChanged", "ValueMemberChanged" und "DisplayMemberChanged" zu subskribieren anstatt die Eigenschaften zu verstecken. –
Da es sich um eine Klassenüberschreibung handelt, ist der sauberste Weg, eine Überschreibung für 'OnDropDown' hinzuzufügen, um den Aufruf dort hinzuzufügen, bevor' base.OnDropDown (e) 'ausgeführt wird. Und btw, für die letzte 'if>' Prüfung, speichern Sie einfach diese Breite in einer Variablen, anstatt diese Berechnung zweimal aufzurufen. – Nyerguds