ListView.DrawSubItem Event


Occurs when the details view of a ListView is drawn and the OwnerDraw property is set to true.

Namespace:   System.Windows.Forms
Assembly:  System.Windows.Forms (in System.Windows.Forms.dll)

Public Event DrawSubItem As DrawListViewSubItemEventHandler

This event lets you customize the appearance of a ListView control using owner drawing. It is raised only when the OwnerDraw property is set to true and the View property is set to View.Details. For more information on owner drawing, see the OwnerDraw property reference topic.


Subitem information typically appears in the tile view as well as the details view, but in the tile view, it must be drawn in a handler for the DrawItem event.

The DrawSubItem event can occur for each ListView subitem. You can handle the DrawItem event to draw elements common to all subitems, such as the background, and handle the DrawSubItem event to draw elements for individual subitems, such as text values. You can also draw all items in the ListView control using only one of the two events, although this may be less convenient. To draw column headers in the details view, you must handle the DrawColumnHeader event.


The DrawSubItem event does not occur for any subitems for which no ColumnHeader object has been added to the Columns collection. Note also that the first subitem of each ListViewItem object represents the parent item itself, and is displayed in the first column.

For more information about handling events, see Handling and Raising Events.

The following code example provides an implementation of a DrawSubItem event handler. For the complete example, see the OwnerDraw reference topic.

' Draws subitem text and applies content-based formatting.
Private Sub listView1_DrawSubItem(ByVal sender As Object, _
    ByVal e As DrawListViewSubItemEventArgs) _
    Handles listView1.DrawSubItem

    Dim flags As TextFormatFlags = TextFormatFlags.Left

    Dim sf As New StringFormat()

        ' Store the column text alignment, letting it default
        ' to Left if it has not been set to Center or Right.
        Select Case e.Header.TextAlign
            Case HorizontalAlignment.Center
                sf.Alignment = StringAlignment.Center
                flags = TextFormatFlags.HorizontalCenter
            Case HorizontalAlignment.Right
                sf.Alignment = StringAlignment.Far
                flags = TextFormatFlags.Right
        End Select

        ' Draw the text and background for a subitem with a 
        ' negative value. 
        Dim subItemValue As Double
        If e.ColumnIndex > 0 AndAlso _
            Double.TryParse(e.SubItem.Text, NumberStyles.Currency, _
            NumberFormatInfo.CurrentInfo, subItemValue) AndAlso _
            subItemValue < 0 Then

            ' Unless the item is selected, draw the standard 
            ' background to make it stand out from the gradient.
            If (e.ItemState And ListViewItemStates.Selected) = 0 Then
            End If

            ' Draw the subitem text in red to highlight it. 
            e.Graphics.DrawString(e.SubItem.Text, _
                Me.listView1.Font, Brushes.Red, e.Bounds, sf)


        End If

        ' Draw normal text for a subitem with a nonnegative 
        ' or nonnumerical value.

    End Try

End Sub

.NET Framework
Available since 2.0
Return to top