Ayarlanamadı Tüm öğeleri görüntülemek için ComboBox kümesinin DropDownHeight ayarını düzgün alamıyorum.DropDownHeight of ComboBox
ComboBox'tan devralınan bir denetim kullanıyorum. Gerekirse, bir sütun içinde birden çok sütun ve metin kaydırma oluşturmak için OnDrawItem ve OnMeasureItem yöntemlerini geçersiz kıldım. Her şey yolunda.
DropDownHeight'ı ayarlamaya çalıştığımda sorun oluşuyor. DropDownHeight'ı rasgele büyük bir değere, öğeler listesinden daha iyi bir değere ayarlıyorum. ComboBox denetimi, listedeki tüm görüntülenen öğelerin boyutundan daha büyük olan DropDownHeight için herhangi bir değeri otomatik olarak kırpıyor gibi görünür. (Eğer MaxDropDownItems mülkiyet yapmam öğelerin sayısı, daha yüksek ayarlanmış olduğunu varsayarsak.) Normalde bu davranış mükemmel çalışıyor, aşağıda gösterildiği gibi: alt text http://www.freeimagehosting.net/uploads/dd09404697.png
Hayır, o değil açılır kutuda benim gerçek veri .
Sorun, tam metnin görüntülenmesi için sarılması gereken açılır menüde bir giriş olduğunda oluşur. Bu giriş iyi görünüyor, ancak ComboBox DropDownHeight hesaplıyor, bu girdilerden biri normalin iki katı uzun olduğu gerçeği yok sayar, bu nedenle açılan satırdaki son girişe ulaşmak için bir satır aşağı kaydırmanız gerekir.
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
ben tam olarak olmak DropDownHeight özelliğini zorlamak nasıl tespit edemez: alt text http://www.freeimagehosting.net/uploads/d0ef715f83.png
Bu Ben bir öğe metin kaydırma ihtiyacı olup olmadığını belirlemek için kullanıyorum ve her öğenin yüksekliğini ayarlamak için koddur İstediğim değer veya ComboBox denetiminin, listedeki öğelerin bir (veya daha fazla) öğesinin normalden daha uzun olduğunu bilmesine nasıl izin verileceği.
Geçersiz kılmayı denedim
Shadow the DropDownHeight özelliği, ancak bunun hiçbir etkisi yok gibi görünüyordu.
DÜZENLEME:
bu problemi ortadan WPF geçiş misiniz? (Standart WPF yeterli customizability Ben 3 sütunlu, değişken yükseklik combobox için özel bir denetim yazmak gerekmez, böylece orada kontrol mı?)
JDHnz, cevabınız için teşekkürler. Windows İletilerini ele geçirmekten kaçınmaya çalışıyorum, ama çözümünüz başka bir yol bulamıyorsa benim için çalışabilir gibi görünüyor. Her bir öğe için ItemHeight öğesini combobox'ta saklayan bazı ek işlevler eklemem gerekir, ancak bu çok zor olmamalıdır. – Stewbob
Teşekkürler JDHnz. Bunu uygulamamda başarılı bir şekilde uygulayabildim. – Stewbob