nicht einstellen Ich kann die DropDownHeight der ComboBox nicht richtig einstellen, um alle Elemente anzuzeigen.Konnte die DropDownHeight von ComboBox
Ich verwende ein Steuerelement, das von der ComboBox erbt. Ich habe die Methoden OnDrawItem und OnMeasureItem überschrieben, um mehrere Spalten und Textumbruch innerhalb einer Spalte zu erstellen, wenn dies erforderlich ist. Das alles funktioniert gut.
Das Problem tritt auf, wenn ich versuche, DropDownHeight festzulegen. Ich habe die DropDownHeight auf einen beliebig großen Wert gesetzt, ein gutes Stück größer als die Liste der Elemente. Das ComboBox-Steuerelement scheint automatisch einen Wert für DropDownHeight abzuschneiden, der größer als die Größe aller angezeigten Elemente in der Liste ist. (Vorausgesetzt, dass Sie die MaxDropDownItems Eigenschaft haben, höher als die Anzahl der Elemente, die ich tue.) Normalerweise funktioniert dieses Verhalten perfekt, wie unten dargestellt: alt text http://www.freeimagehosting.net/uploads/dd09404697.png
Nein, das ist nicht meine wirklichen Daten in der Dropdown-Box .
Das Problem tritt auf, wenn ich einen Eintrag in der Dropdown-Liste habe, die umbrochen werden muss, um den vollständigen Text anzuzeigen. Dieser Eintrag wird zwar angezeigt, aber die ComboBox berechnet die DropDownHeight. Sie ignoriert, dass einer der Einträge doppelt so groß wie normal ist. Sie müssen daher eine Zeile nach unten scrollen, um zum letzten Eintrag in der Dropdownliste zu gelangen. alt text http://www.freeimagehosting.net/uploads/d0ef715f83.png
Dies ist der Code, den ich, wenn ein Artikel Textumbruch, um zu bestimmen bin mit benötigt und der Höhe der einzelnen Elemente setzen:
Protected Overrides Sub OnMeasureItem(ByVal e As System.Windows.Forms.MeasureItemEventArgs)
MyBase.OnMeasureItem(e)
//Determine the proper height of the current row in the dropdown based on
//the length of the OptionDescription string.
Dim tmpStr As String = FilterItemOnProperty(Items(e.Index), "OptionDescription")
Dim lng As Single = e.Graphics.MeasureString(tmpStr, Me.Font).Width
//Use the length of the item and the width of the column to calculate if wrapping is needed.
Dim HeightMultiplier As Integer = Math.Floor(lng/_ColumnWidths(1)) + 1
e.ItemHeight = e.ItemHeight * HeightMultiplier
End Sub
ich nicht bestimmen kann, wie die DropDownHeight Eigenschaft zu zwingen, genau zu sein, der Wert, den ich möchte, oder wie das ComboBox-Steuerelement weiß, dass eines (oder mehrere) der Elemente in der Liste größer als normal sind.
Ich habe versucht,
Override
Schatten die DropDownHeight-Eigenschaft, aber das schien keine Auswirkungen zu haben.
EDIT:
Würde zu WPF Schalt dieses Problem weggehen? (Gibt es genug Anpassbarkeit in der Standard-WPF-Steuerelemente so, dass ich keine eigene Steuerung für eine 3-Spalten mit variabler Höhe Combobox zu schreiben?)
JDHnz, danke für deine Antwort. Ich versuche, die Windows-Nachrichten nicht zu kapern, aber Ihre Lösung sieht so aus, als könnte sie für mich funktionieren, wenn ich keinen anderen Weg finde. Ich müsste meinem Steuerelement zusätzliche Funktionalität hinzufügen, die ItemHeight für jedes Element in der Combobox speichert, aber das sollte nicht zu schwer sein. – Stewbob
Danke JDHnz. Ich konnte dies erfolgreich in meine Anwendung implementieren. – Stewbob