Link to home
Start Free TrialLog in
Avatar of anusdesai
anusdesai

asked on

how can i change color of listview column header

Hi,
how can i change color of listview column header
Avatar of nogovoia
nogovoia

take a look at this (taken from MSDN)

' This method adds two columns to the ListView, setting the Text
' and TextAlign, and Width properties of each ColumnHeader.  The
' HeaderStyle property is set to NonClickable since the ColumnClick
' event is not handled.  Finally the method adds ListViewItems and
' SubItems to each column.
Private Sub InitializeListView()
    Me.ListView1 = New System.Windows.Forms.ListView
    Me.ListView1.BackColor = System.Drawing.SystemColors.Control
    Me.ListView1.Dock = System.Windows.Forms.DockStyle.Top
    Me.ListView1.Location = New System.Drawing.Point(0, 0)
    Me.ListView1.Name = "ListView1"
    Me.ListView1.Size = New System.Drawing.Size(292, 130)
    Me.ListView1.TabIndex = 0
    Me.ListView1.View = System.Windows.Forms.View.Details
    Me.ListView1.MultiSelect = True
    Me.ListView1.HideSelection = False
    ListView1.HeaderStyle = ColumnHeaderStyle.Nonclickable
    Dim columnHeader1 As New ColumnHeader
    With columnHeader1
        .Text = "Breakfast Item"
        .TextAlign = HorizontalAlignment.Left
        .Width = 146
    End With
    Dim columnHeader2 As New ColumnHeader
    With columnHeader2
        .Text = "Price Each"
        .TextAlign = HorizontalAlignment.Center
        .Width = 142
    End With

    Me.ListView1.Columns.Add(columnHeader1)
    Me.ListView1.Columns.Add(columnHeader2)
    Dim foodList() As String = New String() {"Juice", "Coffee", _
        "Cereal & Milk", "Fruit Plate", "Toast & Jelly", _
        "Bagel & Cream Cheese"}
    Dim foodPrice() As String = New String() {"1.09", "1.09", _
        "2.19", "2.49", "1.49", "1.49"}
    Dim count As Integer
    For count = 0 To foodList.Length - 1
        Dim listItem As New ListViewItem(foodList(count))
        listItem.SubItems.Add(foodPrice(count))
        ListView1.Items.Add(listItem)
    Next
    Me.Controls.Add(Me.ListView1)
End Sub
Avatar of anusdesai

ASKER

Hi,
it sets up the backcolor whereas i wanted only for column headers
Avatar of Bob Learned
Try this:

Public Class ListViewColoredHeaders
  Inherits ListView

  Public Sub New()
    Me.OwnerDraw = True
  End Sub

  Private Sub ListViewColoredHeaders_DrawColumnHeader(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawListViewColumnHeaderEventArgs) Handles Me.DrawColumnHeader
    e.Graphics.FillRectangle(Brushes.Red, e.Bounds)
    Dim x As Integer = e.Bounds.Right - 2
    Dim y1 As Integer = e.Bounds.Top
    Dim y2 As Integer = e.Bounds.Bottom

    e.DrawText(TextFormatFlags.EndEllipsis Or TextFormatFlags.Left Or TextFormatFlags.SingleLine Or TextFormatFlags.VerticalCenter)
    e.Graphics.DrawLine(Pens.Black, x, y1, x, y2)
    e.Graphics.DrawLine(Pens.LightGray, x + 1, y1, x + 1, y2)
    e.DrawDefault = False
  End Sub

  Private Sub ListViewColoredHeaders_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawListViewItemEventArgs) Handles Me.DrawItem
    e.DrawDefault = True
  End Sub

  Private Sub ListViewColoredHeaders_DrawSubItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawListViewSubItemEventArgs) Handles Me.DrawSubItem
    e.DrawDefault = True
  End Sub

End Class

Bob
Hi,
How do I call this class?
ASKER CERTIFIED SOLUTION
Avatar of Bob Learned
Bob Learned
Flag of United States of America image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Cheers mate