ListView.DrawItem Evento

Definición

Se produce cuando se dibuja un control ListView y el valor de la propiedad OwnerDraw se ha establecido en 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 

Ejemplos

En el ejemplo de código siguiente se proporciona una implementación de un controlador de eventos DrawItem.The following code example provides an implementation of a DrawItem event handler. Para obtener el ejemplo completo, vea el tema de referencia 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

Comentarios

Este evento permite personalizar la apariencia de un control ListView mediante el dibujo del propietario.This event lets you customize the appearance of a ListView control using owner drawing. Solo se genera cuando la propiedad OwnerDraw está establecida en true.It is raised only when the OwnerDraw property is set to true. Para obtener más información sobre el dibujo del propietario, vea el tema de referencia de la propiedad OwnerDraw.For more information about owner drawing, see the OwnerDraw property reference topic.

El evento DrawItem puede producirse para cada elemento ListView.The DrawItem event can occur for each ListView item. Cuando la propiedad View está establecida en View.Details, también se producen los eventos @no__t 2 y DrawColumnHeader.When the View property is set to View.Details, the DrawSubItem and DrawColumnHeader events also occur. En este caso, puede controlar el evento DrawItem para dibujar elementos comunes a todos los elementos, como el fondo, y controlar el evento DrawSubItem para dibujar elementos para subelementos individuales, como los valores de texto.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. También puede dibujar todos los elementos en el control ListView con solo uno de los dos eventos, aunque esto puede ser menos práctico.You can also draw all items in the ListView control using only one of the two events, although this may be less convenient. Para dibujar los encabezados de columna en la vista de detalles, debe controlar el evento DrawColumnHeader.To draw column headers in the details view, you must handle the DrawColumnHeader event.

Nota

Debido a un error en el control de Win32 subyacente, el evento DrawItem se produce sin eventos DrawSubItem asociados una vez por fila en la vista de detalles cuando el puntero del mouse se mueve sobre la fila, lo que provoca que se dibuje cualquier elemento pintado en un controlador de eventos DrawSubItem mediante un fondo personalizado dibujado en un controlador de eventos 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. Vea el ejemplo del tema de referencia OwnerDraw para obtener una solución alternativa que invalida cada fila cuando se produce el evento adicional.See the example in the OwnerDraw reference topic for a workaround that invalidates each row when the extra event occurs. Una solución alternativa consiste en colocar todo el código de dibujo personalizado en un controlador de eventos DrawSubItem y pintar el fondo de todo el elemento (incluidos los subelementos) solo cuando el valor de DrawListViewSubItemEventArgs.ColumnIndex sea 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.

Para obtener más información sobre el manejo de eventos, consulte controlar y provocar eventos.For more information about handling events, see Handling and Raising Events.

Se aplica a

Consulte también: