2010-11-17 14 views
7

Đối với dự án hiện tại, tôi cần một menu thả xuống có tên màu (chuỗi) có hình vuông màu nhỏ bên cạnh hình ảnh (hình ảnh). Vì vậy, tôi đã có thể thiết kế một ComboBox tùy chỉnh để đạt được điều này. Tuy nhiên, tôi đang gặp một vấn đề .... khi tôi chọn một mục từ danh sách, ví dụ màu không hiển thị, chỉ có tên của màu đó. (Xem ví dụ dưới đây)Vẽ hình ảnh bên trong Hộp tổ hợp tùy chỉnh

menu mở rộng:

alt text

Sau khi mục được chọn:

alt text

Để vẽ các màu sắc bên cạnh các chuỗi để bắt đầu với, tôi sử dụng:

// Draws the items into the ColorSelector object 
    protected override void OnDrawItem(DrawItemEventArgs e) 
    { 
     e.DrawBackground(); 
     e.DrawFocusRectangle(); 

     DropDownItem item = (DropDownItem)Items[e.Index]; 
     // Draw the colored 16 x 16 square 
     e.Graphics.DrawImage(item.Image, e.Bounds.Left, e.Bounds.Top); 
     // Draw the value (in this case, the color name) 
     e.Graphics.DrawString(item.Value, e.Font, new 
       SolidBrush(e.ForeColor), e.Bounds.Left + item.Image.Width, e.Bounds.Top + 2); 

     base.OnDrawItem(e); 
    } 

Trường hợp một DropDownItem chứa hình ảnh và chuỗi được vẽ. Vì vậy ... có ai biết những gì tôi cần phải ghi đè hoặc những gì tôi cần phải làm để có được ComboBox để vẽ hình ảnh và chuỗi cả hai, giống như nó đã làm khi danh sách được mở rộng, khi một mục được chọn?

Cảm ơn rất nhiều; Chúc mừng!

Trả lời

7

Set DropDownStyle-DropDownList; theo mặc định ComboBox sử dụng TextBox để hiển thị mục đã chọn. Đây là lý do tại sao mục được chọn hiển thị khác với các mục thả xuống.

+0

Hoàn hảo! Điều đó hoạt động rất đẹp! Cảm ơn bạn rất nhiều. Tôi không có ý tưởng rằng kiểm soát chỉ đơn giản là sử dụng một đối tượng TextBox trên đầu trang; điều đó có vẻ giống như một triển khai thú vị (và không có bản năng). – JToland

0
+0

Tôi thực sự không thể thấy bất kỳ điều gì mà tác giả của bài viết đó đang làm mà tôi chưa làm .... Thực ra, tôi chỉ xem xét nó một chút và tôi chắc rằng giải pháp của anh ấy sẽ có cùng vấn đề đã có. Nếu bạn nhìn vào hình ảnh đầu tiên trong bài viết đó, bạn có thể thấy mục được chọn không thực sự có hình vuông/hình màu bên cạnh nó. – JToland

0

Bạn cũng phải ghi đè OnPaint theo cách tương tự với phương pháp OnDrawItem của bạn để làm việc này.