2008-10-18 32 views
10

Tôi đang sử dụng một ListView trong C# để tạo lưới. Tôi muốn tìm ra cách để có thể làm nổi bật một ô cụ thể, theo chương trình. Tôi chỉ cần đánh dấu một ô.C# Danh sáchXem chi tiết, Đánh dấu một ô đơn

Tôi đã thử nghiệm với các phụ đề Chủ sở hữu đã vẽ, nhưng sử dụng mã bên dưới, tôi nhận được các ô được đánh dấu nhưng không có văn bản! Có ý tưởng nào về cách làm việc này không? Cảm ơn bạn đã giúp đỡ.

//m_PC.Location is the X,Y coordinates of the highlighted cell. 


void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e) 
{ 
    if ((e.ItemIndex == m_PC.Location.Y) && (e.Item.SubItems.IndexOf(e.SubItem) == m_PC.Location.X)) 
     e.SubItem.BackColor = Color.Blue; 
    else 
     e.SubItem.BackColor = Color.White; 
    e.DrawBackground(); 
    e.DrawText(); 
} 
+0

Winforms hoặc web? – tvanfosson

Trả lời

14

Bạn có thể làm điều này mà không cần chủ sở hữu vẽ danh sách:

// create a new list item with a subitem that has white text on a blue background 
ListViewItem lvi = new ListViewItem("item text"); 
lvi.UseItemStyleForSubItems = false; 
lvi.SubItems.Add(new ListViewItem.ListViewSubItem(lvi, 
    "subitem", Color.White, Color.Blue, lvi.Font)); 

Những lập luận màu để các nhà xây dựng ListViewSubItem đang kiểm soát foreground và màu nền của subitem. Điều quan trọng cần làm ở đây là đặt UseItemStyleForSubItems thành False trên mục danh sách, nếu không thay đổi màu của bạn sẽ bị bỏ qua.

Tôi nghĩ rằng giải pháp vẽ chủ sở hữu của bạn cũng đã hoạt động, nhưng bạn phải nhớ thay đổi màu văn bản (nền trước) khi bạn thay đổi nền thành màu xanh dương, nếu không văn bản sẽ khó nhìn thấy.

1

Đã tìm ra. Đây là mã để chuyển đổi điểm nổi bật của một tiểu mục cụ thể.

listView1.Items[1].UseItemStyleForSubItems = false; 
if (listView1.Items[1].SubItems[10].BackColor == Color.DarkBlue) 
{ 
    listView1.Items[1].SubItems[10].BackColor = Color.White; 
    listView1.Items[1].SubItems[10].ForeColor = Color.Black; 
} 
else 
{ 
    listView1.Items[1].SubItems[10].BackColor = Color.DarkBlue; 
    listView1.Items[1].SubItems[10].ForeColor = Color.White; 
} 
1

Trong trường hợp của tôi, tôi muốn làm nổi bật các hàng cụ thể, bao gồm tất cả các trường. Vì vậy, mỗi hàng trong listview của tôi với "Medicare" trong cột đầu tiên được toàn bộ hàng được đánh dấu:

public void HighLightListViewRows(ListView xLst) 
     { 
      for (int i = 0; i < xLst.Items.Count; i++) 
      { 
       if (xLst.Items[i].SubItems[0].Text.ToString() == "Medicare") 
       { 
        for (int x = 0; x < xLst.Items[i].SubItems.Count; x++) 
        { 
         xLst.Items[i].SubItems[x].BackColor = Color.Yellow; 
        } 
       } 
      } 
     } 
Các vấn đề liên quan