Exportar (0) Imprimir
Expandir todo

ListView.DrawItem (Evento)

Se produce cuando se dibuja un control ListView y el valor de la propiedad OwnerDraw se ha establecido en true.

Espacio de nombres: System.Windows.Forms
Ensamblado: System.Windows.Forms (en system.windows.forms.dll)

public event DrawListViewItemEventHandler DrawItem
/** @event */
public void add_DrawItem (DrawListViewItemEventHandler value)

/** @event */
public void remove_DrawItem (DrawListViewItemEventHandler value)

En JScript, se pueden controlar los eventos que define una clase, pero no se pueden definir unos propios.
No aplicable.

Este evento permite personalizar la apariencia de un control ListView mediante el dibujo de propietario. Se produce sólo cuando el valor de la propiedad OwnerDraw se establece en true. Para obtener más información sobre el dibujo de propietario, vea el tema referente a la propiedad OwnerDraw.

El evento DrawItem se puede producir para cada elemento de ListView. Cuando el valor de la propiedad View se establece en View.Details, también se producen los eventos DrawSubItem y DrawColumnHeader. En este caso, se puede controlar el evento DrawItem para dibujar los elementos comunes a todos los subelementos, como el fondo, y controlar el evento DrawSubItem para dibujar los elementos de los concretos subelementos, como los valores de texto. También se pueden dibujar todos los elementos del control ListView utilizando sólo uno de los dos eventos, aunque puede resultar menos práctico. Para dibujar los encabezados de columna en la vista de detalles, debe controlar el evento DrawColumnHeader.

NotaNota:

Debido a un error en el control Win32 subyacente, el evento DrawItem, sin que le acompañen eventos DrawSubItem, se produce una vez por fila en la vista de detalles cuando el puntero del mouse se mueve por la fila, provocando que, sobre cualquier dibujo que haya en un controlador de eventos DrawSubItem, se dibuje el fondo personalizado que esté trazado en un controlador de eventos DrawItem. Vea en el ejemplo del tema referente a OwnerDraw una solución que invalida cada fila cuando se produce el evento adicional. Otra solución alternativa es colocar el código de dibujo personalizado en un controlador de eventos DrawSubItem y dibujar el fondo de todo el elemento (incluidos los subelementos) sólo cuando el valor de DrawListViewSubItemEventArgs.ColumnIndex sea 0.

Para obtener más información sobre la forma de controlar eventos, vea Utilizar eventos.

En el ejemplo de código siguiente se proporciona una implementación de un controlador de eventos DrawItem. Para obtener el ejemplo completo, vea el tema referente a OwnerDraw.

// 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 the column header row and for entire
// ListView items.
private void myListView_DrawItem(Object sender, DrawListViewItemEventArgs e)
{
    // Draw the background for the column header row.
    if (e.get_ItemIndex() == -1) {
        e.get_Item().set_BackColor(Color.get_Black());
        e.DrawBackground();
    }
    // Draw the background for a selected item.
    else {
        if (Convert.ToInt32((e.get_State() & ListViewItemStates.Selected))
            != 0) {
            e.get_Graphics().FillRectangle(Brushes.get_Maroon(),
                e.get_Bounds());
            e.DrawFocusRectangle();
        }
        // Draw the background for an unselected item.
        else {
            LinearGradientBrush myBrush = new LinearGradientBrush(
                e.get_Bounds(), Color.get_Orange(), Color.get_Maroon(),
                LinearGradientMode.Horizontal);
            try {
                e.get_Graphics().FillRectangle(myBrush, e.get_Bounds());
            }
            finally {
                myBrush.Dispose();
            }    
        }
    }
    // Draw the item text for views other than the Details view.
    if (!(((ListView)sender).get_View().Equals(View.Details))) {
        e.DrawText();
    }
} //myListView_DrawItem

Windows 98, Windows 2000 Service Pack 4, Windows CE, Windows Millennium, Windows Mobile para Pocket PC, Windows Mobile para Smartphone, Windows Server 2003, Windows XP Media Center, Windows XP Professional x64, Windows XP SP2, Windows XP Starter

Microsoft .NET Framework 3.0 es compatible con Windows Vista, Microsoft Windows XP SP2 y Windows Server 2003 SP1.

.NET Framework

Compatible con: 3.0, 2.0
Mostrar:
© 2015 Microsoft