ListView.DrawItem 事件

定义

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

public:
 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 

示例

下面的代码示例提供了 @no__t 0 事件处理程序的实现。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);
        e.DrawFocusRectangle();
    }
    else
    {
        // 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)
    {
        e.DrawText();
    }
}
' 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)
        e.DrawFocusRectangle()

    Else

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

    End If

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

End Sub

注解

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

对于每个 @no__t 项,都可以发生 @no__t 0 事件。The DrawItem event can occur for each ListView item. View 属性设置为 View.Details 时,还会发生 DrawSubItem 和 @no__t。When the View property is set to View.Details, the DrawSubItem and DrawColumnHeader events also occur. 在这种情况下,你可以处理 DrawItem 事件来绘制所有项(如背景)所共有的元素,并处理 @no__t 1 事件以绘制单个子项(如文本值)的元素。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 控件中的 bug,当鼠标指针移到行上时,将发生 @no__t 0 事件,而不会伴随详细信息视图中的每行出现一次 @no__t 1 事件,从而导致在 @no__t在 @no__t 3 事件处理程序中绘制的自定义背景。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. 另一种解决方法是将所有自定义绘图代码置于 @no__t 0 事件处理程序中,并且仅当 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.

适用于

另请参阅