ListView.DrawItem ListView.DrawItem ListView.DrawItem ListView.DrawItem Event


发生时ListView绘制并OwnerDraw属性设置为trueOccurs when a ListView is drawn and the OwnerDraw property is set to true.

 event System::Windows::Forms::DrawListViewItemEventHandler ^ DrawItem;
public event System.Windows.Forms.DrawListViewItemEventHandler DrawItem;
member this.DrawItem : System.Windows.Forms.DrawListViewItemEventHandler 
Public Custom Event DrawItem As DrawListViewItemEventHandler 


下面的代码示例提供的实现DrawItem事件处理程序。The following code example provides an implementation of a DrawItem event handler. 有关完整示例,请参阅OwnerDraw参考主题。For the complete example, see the OwnerDraw reference topic.

// Draws the backgrounds for entire ListView items.
private void listView1_DrawItem(object sender,
    DrawListViewItemEventArgs e)
    if ((e.State & ListViewItemStates.Selected) != 0)
        // Draw the background and focus rectangle for a selected item.
        e.Graphics.FillRectangle(Brushes.Maroon, e.Bounds);
        // Draw the background for an unselected item.
        using (LinearGradientBrush brush =
            new LinearGradientBrush(e.Bounds, Color.Orange,
            Color.Maroon, LinearGradientMode.Horizontal))
            e.Graphics.FillRectangle(brush, e.Bounds);

    // Draw the item text for views other than the Details view.
    if (listView1.View != View.Details)
' Draws the backgrounds for entire ListView items.
Private Sub listView1_DrawItem(ByVal sender As Object, _
    ByVal e As DrawListViewItemEventArgs) _
    Handles listView1.DrawItem

    If Not (e.State And ListViewItemStates.Selected) = 0 Then

        ' Draw the background for a selected item.
        e.Graphics.FillRectangle(Brushes.Maroon, e.Bounds)


        ' Draw the background for an unselected item.
        Dim brush As New LinearGradientBrush(e.Bounds, Color.Orange, _
            Color.Maroon, LinearGradientMode.Horizontal)
            e.Graphics.FillRectangle(brush, e.Bounds)
        End Try

    End If

    ' Draw the item text for views other than the Details view.
    If Not Me.listView1.View = View.Details Then
    End If

End Sub


此事件,可以自定义的外观ListView使用所有者描述的控件。This event lets you customize the appearance of a ListView control using owner drawing. 将引发此事件时,才OwnerDraw属性设置为trueIt is raised only when the OwnerDraw property is set to true. 有关所有者描述的详细信息,请参阅OwnerDraw属性参考主题。For more information about owner drawing, see the OwnerDraw property reference topic.

DrawItem事件可以针对每个发生ListView项。The DrawItem event can occur for each ListView item. View属性设置为View.Details,则DrawSubItemDrawColumnHeader事件也可能发生。When the View property is set to View.Details, the DrawSubItem and DrawColumnHeader events also occur. 在这种情况下,可以处理DrawItem事件以绘制到所有项,如在后台,常见的元素并处理DrawSubItem事件以绘制为各个子项,如文本值的元素。In this case, you can handle the DrawItem event to draw elements common to all items, such as the background, and handle the DrawSubItem event to draw elements for individual subitems, such as text values. 此外可以在中绘制的所有项ListView尽管这可能是不太方便使用的两个事件之一的控制。You can also draw all items in the ListView control using only one of the two events, although this may be less convenient. 若要在详细信息视图中绘制列标题,你必须处理DrawColumnHeader事件。To draw column headers in the details view, you must handle the DrawColumnHeader event.


由于在基础 Win32 控件中,一个 bugDrawItem事件发生而不使用随附DrawSubItem当鼠标指针移动到行的详细信息视图中的每一行的事件,从而导致的任何内容中绘制DrawSubItem事件处理程序为绘制自定义背景中绘制转移DrawItem事件处理程序。Because of a bug in the underlying Win32 control, the DrawItem event occurs without accompanying DrawSubItem events once per row in the details view when the mouse pointer moves over the row, causing anything painted in a DrawSubItem event handler to be painted over by a custom background drawn in a DrawItem event handler. 请参阅中的示例OwnerDraw额外事件发生时使每行一种解决方法的参考主题。See the example in the OwnerDraw reference topic for a workaround that invalidates each row when the extra event occurs. 备用解决方法是将所有自定义绘制代码放入DrawSubItem事件处理程序和画图整个项 (包括子项) 的背景时,才DrawListViewSubItemEventArgs.ColumnIndex值为 0。An alternative workaround is to put all your custom drawing code in a DrawSubItem event handler and paint the background for the entire item (including subitems) only when the DrawListViewSubItemEventArgs.ColumnIndex value is 0.

有关处理事件的详细信息,请参阅处理和引发事件For more information about handling events, see Handling and Raising Events.