Tôi không thể tải DropDownHeight của ComboBox đúng cách để hiển thị tất cả các mục.Không thể đặt DropDownHeight của ComboBox
Tôi đang sử dụng điều khiển kế thừa từ ComboBox. Tôi đã ghi đè lên các phương thức OnDrawItem và OnMeasureItem để tạo ra nhiều cột và gói văn bản trong một cột nếu nó được yêu cầu. Điều này tất cả hoạt động tốt.
Sự cố xảy ra khi tôi cố gắng đặt DropDownHeight. Tôi đặt DropDownHeight ở một giá trị lớn tùy ý, lớn hơn một chút so với danh sách các mục. Điều khiển ComboBox xuất hiện để tự động cắt bớt bất kỳ giá trị nào cho DropDownHeight lớn hơn kích thước của tất cả các mục được hiển thị trong danh sách. (Giả sử bạn có thuộc tính MaxDropDownItems được đặt cao hơn số mục, mà tôi làm.) Thông thường, hành vi này hoạt động hoàn hảo, như được hiển thị bên dưới: alt text http://www.freeimagehosting.net/uploads/dd09404697.png
Không, đó không phải là dữ liệu thực của tôi trong hộp thả xuống .
Sự cố xảy ra khi tôi có mục nhập trong trình đơn thả xuống cần bọc để hiển thị toàn văn. Mục này hiển thị tốt, nhưng tuy nhiên ComboBox đang tính toán DropDownHeight, nó bỏ qua thực tế rằng một trong các mục cao gấp hai lần bình thường, vì vậy bạn phải cuộn xuống một dòng để đến mục nhập cuối cùng trong trình đơn thả xuống. alt text http://www.freeimagehosting.net/uploads/d0ef715f83.png
Đây là mã mà tôi đang sử dụng để xác định xem một mục cần gói văn bản và thiết lập chiều cao của từng hạng mục:
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
tôi không thể xác định làm thế nào để buộc các tài sản DropDownHeight để được chính xác giá trị mà tôi muốn, hoặc làm thế nào để cho các ComboBox kiểm soát biết rằng một (hoặc nhiều hơn) của các mục trong danh sách cao hơn bình thường.
Tôi đã cố gắng
Ghi đè
Đổ bóng thuộc tính DropDownHeight, nhưng điều này dường như không có tác động.
EDIT:
sẽ chuyển sang WPF làm cho vấn đề này biến mất? (Có đủ tùy chỉnh trong các điều khiển WPF tiêu chuẩn để tôi không cần phải viết một điều khiển tùy chỉnh cho một combobox 3 cột, biến chiều cao?)
JDHnz, cảm ơn phản hồi của bạn. Tôi đang cố gắng để tránh cướp tin nhắn Windows, nhưng giải pháp của bạn trông giống như nó có thể làm việc cho tôi nếu tôi không thể tìm thấy một cách khác. Tôi sẽ cần phải thêm một số chức năng bổ sung để kiểm soát của tôi lưu trữ ItemHeight cho mỗi mục trong combobox, nhưng điều đó không nên quá khó. – Stewbob
Cảm ơn JDHnz. Tôi đã có thể triển khai thành công ứng dụng này vào ứng dụng của mình. – Stewbob