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 

Тип события

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);
        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.

DrawItemСобытие может происходить для каждого ListView элемента.The DrawItem event can occur for each ListView item. Если View свойство имеет значение View.Details , DrawSubItem DrawColumnHeader также возникают события и.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. Для рисования заголовков столбцов в представлении Details необходимо выполнить обработку DrawColumnHeader события.To draw column headers in the details view, you must handle the DrawColumnHeader event.

Примечание

Из-за ошибки в базовом элементе управления Win32 DrawItem событие возникает без сопутствующих 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.

Применяется к

См. также раздел