Ich leitete eine Klasse von ComboBox, machte es zu einem Besitzer gezeichneten Listbox (DrawMode.OwnerDrawVariable Stil), und durch Überschreiben von OnMeasureItem und OnDrawItem füge ich spezielle Elemente in die Dropdown-Liste (Trennzeichen, zum Beispiel) sind kleiner/größer als die normalen Elemente, die die Kontrolle bewohnen.Variabler Besitzer-Zeichensatz ComboBox; Liste nicht korrekt sortiert
Nun, das Problem, das ich habe und nicht effektiv zu beheben scheint, ist die Größe der Dropdown-Liste: Es gibt einen hässlichen leeren Platz am Ende der Liste, wenn es fällt. Ich dachte, ich habe das angepackt, indem ich die DropDownHeight -Eigenschaft der ComboBox auf die Summe der Höhe aller Elemente gesetzt habe, aber das scheint nicht zu funktionieren die Zeit. Manchmal, bei einer zufälligen Anzahl von Gegenständen, kehrt der leere Leerraum des Schicksals zurück. Dies ist ein ungewöhnliches Problem, aber hoffentlich ein gemeinsames und leicht zu beheben.
Wie kann ich die Drop-down-Liste der ComboBox genau auf die Größe der darin enthaltenen Elemente anpassen?
Dieser Fehler erstreckt sich ein wenig tiefer als das. Der Standardwert von DropDownHeight basiert auf der Schriftgröße der Elemente in der Combobox. Jede Änderung der Höhe eines einzelnen Elements, die nicht auf einer Änderung der Schriftgröße basiert, führt zu einem Problem mit der DropDownHeight-Eigenschaft. – Stewbob
Nein, die Standardgröße ist in einer Konstanten fest codiert, sehen Sie in der Referenzquelle nach. Es heißt "DefaultDropDownHeight". Wenn Ihre Theorie richtig ist, sollten Sie dies viel häufiger sehen. Vor allem, da Sie OnMeasureItem implementieren, wird die Artikelhöhe immer nicht standardisiert sein. Ich bin gezwungen, hier zu raten, Ihre Frage hat keinen Hinweis darauf, was das Aussehen der Lücke auslösen könnte. –
@nobugz: Ja, du hast Recht. Ich tippte schneller als ich dachte. Die Artikelhöhe basiert auf der Schriftgröße.In bestimmten Fällen wird damit der maximale Wert von DropDownHeight bestimmt. – Stewbob