2014-07-13 232 views
0

如何使用vb.net將列表視圖對象中選定行的選定顏色設置爲背景顏色。如何使選定的顏色成爲列表視圖中的背景顏色

我的確看到了一個將Ownerdraw設置爲true的例子 - 但它弄亂了列標題。雖然我能夠通過分項循環,使該行選定的顏色背景色

下面的代碼塊:

For i = 0 To LV_ProductsEdit.SelectedItems.Item(0).SubItems.Count - 1 
     LV_ProductsEdit.SelectedItems.Item(0).SubItems(i).BackColor = Color.Gold 
    Next 

我有一個類似的循環,它會恢復到原來的透明色當新項目被選中。

任何想法。

感謝

奧馬爾

+0

列表視圖自動使用該系統突出顯示的顏色標記選定的項目,你想使用不同的顏色? – Plutonix

+0

是,我試圖使用不同的顏色,例如 - 當用戶選擇一行時在列表視圖中,我希望它具有金色。它確實得到金色,但用戶可以看到一旦失去了對列表視圖的焦點。所以如果該行被選中,突出顯示將是藍色的 – Omer

+0

不能告訴沒有代碼時可能出現的錯誤;你也沒有添加語言標記 – Plutonix

回答

0

我還是不太清楚是什麼問題。你不需要通過SubItems循環。每個項目都有一個UseItemStyleForSubItems屬性,它告訴子項目使用相同的Font,ForeColor和BackColor作爲父項目。默認爲True,所以設置項目背景色應該是足夠了:

For Each lvi As ListViewItem In myLV.SelectedItems 
    lvi.BackColor = Color.Gold 
Next 

原來的顏色是不是透明的,而應該是SystemColors.Window


您還可以將HideSelection重置爲False。當LV沒有焦點時,選中的項目仍然會突出顯示(灰色),這似乎是您在原始問題中提出的問題。

+0

感謝您的提示。讓我重申一下。我有一個ListView中顯示的產品列表。現在我想要的是當我在列表視圖中選擇行時,應該說金色,顏色也適用於它。但是,由於行被選中,行上的默認高亮顏色是可見的,它是藍色的,並且當我將焦點移到黃金可見的其他控件 – Omer

+0

這就是Windows的工作方式。 **用戶**有一些與「Highlight」相關的顏色,在你的系統上顯然是藍色的。該顏色用於LV SelectedItems。如果你想迫使它成爲黃金,你將不得不繼承控制並接管繪畫。 – Plutonix

+0

謝謝@Plutonix。我會將它標記爲一個很好的提示:)。只是一個快速的,關於如何子類化的任何提示? – Omer

0

如果您只想將選擇顏色從藍色改爲其他顏色,以下是我找到的代碼。首先,將ownerdraw設置爲true。在這裏,我的listview被稱爲ListViewQuote。

Private Sub ListViewQuote_DrawColumnHeader(sender As Object, e As DrawListViewColumnHeaderEventArgs) Handles ListViewQuote.DrawColumnHeader 
    e.DrawDefault = True 
End Sub 

Private Sub ListViewQuote_DrawItem(sender As Object, e As DrawListViewItemEventArgs) Handles ListViewQuote.DrawItem 
    If e.Item.Selected = False Then 
     e.DrawDefault = True 
    End If 
End Sub 

Private Sub ListViewQuote_DrawSubItem(sender As Object, e As DrawListViewSubItemEventArgs) Handles ListViewQuote.DrawSubItem 
    If e.Item.Selected = True Then 
     e.Graphics.FillRectangle(New SolidBrush(FromArgb(255, 0, 0)), e.Bounds) 
     TextRenderer.DrawText(e.Graphics, e.SubItem.Text, New Font(Me.Font, Nothing), New Point(e.Bounds.Left + 3, e.Bounds.Top + 2), HighlightText) 
    Else 
     e.DrawDefault = True 
    End If 
End Sub 

要改變我得從什麼顏色,只需要改變「新SolidBrush(FromArgb(255,0,0)」給你想要的畫筆。文本的前景色爲「HighlightText」,這也可以更改爲任何顏色。

這適用於ListView的詳細信息視圖。


相關問題