2010-02-15 43 views
7
  1. Có cách nào để tô màu các phần của Mục ListBox (không chỉ toàn bộ dòng) không? Ví dụ mục danh sách bao gồm 5 từ và chỉ một từ được tô màu hoặc 3 của 5.
  2. Có cách nào để thực hiện tương tự với ListView không? (Tôi biết rằng ListView có thể được tô màu cho mỗi cột nhưng tôi muốn có nhiều màu trong một cột).

Tôi chỉ quan tâm đến các giải pháp miễn phí và ưu tiên không thực hiện hoặc thay đổi mức sử dụng hiện tại (ít nỗ lực nhất để đưa ListBox màu vào vị trí bình thường).Cách tô màu các phần của đường Listbox/ListView trong C# WinForms?

Với regards,

MadBoy

Trả lời

14

This article cho biết cách sử dụng DrawItem của ListBox với DrawMode được đặt thành một trong các giá trị OwnerDraw. Về cơ bản, bạn làm điều gì đó như thế này:

listBox1.DrawMode = OwnerDrawFixed; 
listBox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBox1_DrawItem); 

private void listBox1_DrawItem(object sender, DrawItemEventArgs e) 
{ 
e.DrawBackground(); 
e.DrawFocusRectangle(); 
// TODO: Split listBox1.Items[e.Index].ToString() and then draw each separately in a different color 
e.Graphics.DrawString(listBox1.Items[e.Index].ToString(),new Font(FontFamily.GenericSansSerif, 14, FontStyle.Bold),new SolidBrush(color[e.Index]),e.Bounds); 
} 

Thay vì gọi Drawstring đơn, Split listBox1.Items [e.Index] ToString() vào lời nói và thực hiện cuộc gọi riêng biệt để Drawstring cho mỗi từ. Bạn sẽ phải thay thế e.bounds bằng một vị trí x, y hoặc hình chữ nhật bao quanh cho mỗi từ.

Phương pháp tương tự sẽ hoạt động với ListView.

+0

Chỉ cần quan sát: theo như tôi có thể nói, điều này ngăn cản thanh cuộn ngang tự động ('HorizontalScrollbar = true;') xuất hiện khi nội dung của 'Điều khiển' quá lớn. – Pooven

1

Không có built-in API hỗ trợ kiểu này sửa đổi một WinForms ListBox hoặc ListView. Đó là chắc chắn có thể đạt được điều này nhưng giải pháp sẽ liên quan đến rất nhiều bức tranh tùy chỉnh và có khả năng trọng WndProc. Đây sẽ là một giải pháp rất có liên quan và nặng nề.

Nếu loại trải nghiệm này quan trọng đối với đơn đăng ký của bạn, tôi nghĩ bạn nên xem xét WPF là một giải pháp rất nghiêm túc. WPF được thiết kế để cung cấp loại kẹo mắt này và có thể có nhiều mẫu trên web để giúp bạn thiết lập và chạy.

+0

Có, tôi rất quan tâm để làm việc với WPF nhưng tôi nên đã chọn WPF hơn 1 năm trước đây, và không phải bây giờ khi nó là dòng 90k mã (nơi GUI giống như 30k dòng). Chuyển nó sang WPF sẽ thực sự là một kẻ giết thời gian. – MadBoy

Các vấn đề liên quan