2010-10-25 40 views
5

Làm cách nào để tạo màu nền của điều khiển ListViews cho các mục thay đổi từ mục này sang mục khác như trong WinAmp, cùng với việc thay đổi màu tiêu đề cột?Danh sách thay đổiXem màu nền của mặt hàng

http://i.stack.imgur.com/30pQy.png

Nếu bạn nhìn kỹ bạn sẽ nhìn thấy mục đầu tiên là một màu xám đậm và thứ hai là màu đen và vân vân.

Trả lời

9

Bạn có thể đặt thuộc tính ListViewItem.BackColor, tuy nhiên việc này phải được thực hiện thủ công cho mỗi dòng thay thế. Ngoài ra, bạn có thể sử dụng một số DataGridView có thuộc tính AlternateRowStyle sẽ tự động thực hiện việc này - mặc dù bạn sẽ cần phải gắn thẻ các hàng của mình trong một tập hợp các loại là một chủ đề khác.

Đối với trường hợp đơn giản:

foreach (ListViewItem item in listView1.Items) 
{ 
    item.BackColor = item.Index % 2 == 0 ? Color.Red : Color.Black; 
} 
+1

Chúng ta nên làm gì nếu chúng ta muốn vẽ chế độ xem Danh sách trống – SurajSing

0

Tôi mang nó mà bạn thêm hàng (subitems) trong vòng một? Nếu vậy hãy sử dụng bộ đếm vòng lặp để tìm ra màu nào bạn muốn.

string[] strings = new string[]{"dild", "dingo"}; 
int i = 0; 
foreach (var item in strings) 
{ 
    Color color = i++ % 2 == 0 ? Color.LightBlue : Color.LightCyan; 
    ListViewItem lv = listView1.Items.Add(item); 
    lv.SubItems[0].BackColor = color; 
} 
0
for (int index = 0; index <= ListView1.Items.Count; index++) 
{ 
    if (index % 2 == 0) 
    { 
     ListView1.Items(index).BackColor = Color.LightGray; 
    } 

} 
+0

Trong mã của bạn, đầu tiên tất cả các mục sẽ được tô màu duy nhất, sau đó - 1/2 trong số chúng sẽ được sơn lại. Đó không phải là rất hiệu quả, tôi đoán vậy. Vì vậy, tốt hơn là vẽ chúng khi thêm, tức là chỉ một lần. – abatishchev

+0

Có! Tôi đồng ý ... Chỉ là tôi không thể tìm thấy một sự kiện cho Item Add trong ListView ... Item Paint và Sub Item Paint events dường như không cháy .... –

0
private static void RepaintListView(ListView lw) 
{ 
    var colored = false; 
    foreach (ListViewItem item in lw.Items) 
    { 
     item.BackColor = colored ? Color.LightBlue : Color.White; 
     colored = !colored; 
    } 
} 

Bạn có thể gọi phương pháp này sau khi mục bổ sung. Hoặc sử dụng trực tiếp trên thêm

1

Xử lý sự kiện DrawItem trên hộp danh sách và đặt DrawMode thành OwnerDrawVariable. Các DrawItemEventArgs cung cấp một tài sản BackColor có thể được thiết lập dựa trên chỉ số (cũng trong arg).

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