2008-10-18 48 views
10

我在C#中使用ListView來製作一個網格。我想通過編程的方式找到一種能夠突出特定單元格的方法。我只需要突出顯示一個單元格。C#ListView細節,突出顯示一個單元格

我已經試用了所有者繪製的子項目,但使用下面的代碼,我得到突出顯示的單元格,但沒有文本!有沒有關於如何使這項工作的任何想法?謝謝你的幫助。

//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 or web? – tvanfosson 2008-10-18 17:02:38

回答

14

你可以做到這一點沒有老闆拉列表:

// 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)); 

顏色參數的構造函數ListViewSubItem所控制的子項的前景色和背景色。此處要做的關鍵事項是在列表項上將UseItemStyleForSubItems設置爲False,否則您的顏色更改將被忽略。

我認爲您的所有者繪製解決方案也會起作用,但您必須記住在將背景更改爲藍色時更改文本(前景)顏色,否則文本很難看清。

1

想通了。以下代碼可以切換特定子項目的突出顯示。

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

在我的情況下,我想突出顯示特定的行,包括所有的字段。因此,我在列表視圖中第一列的「Medicare」中的每一行都會突出顯示整行:

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; 
        } 
       } 
      } 
     } 
相關問題