Condividi tramite


ListView.DrawItem Evento

Definizione

Si verifica quando viene creata una classe ListView e la proprietà OwnerDraw è impostata su true.

public:
 event System::Windows::Forms::DrawListViewItemEventHandler ^ DrawItem;
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 

Tipo evento

Esempio

Nell'esempio di codice seguente viene fornita un'implementazione di un DrawItem gestore eventi. Per l'esempio completo, vedere l'argomento OwnerDraw di riferimento.

// 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

Commenti

Questo evento consente di personalizzare l'aspetto di un ListView controllo usando il disegno del proprietario. Viene generato solo quando la OwnerDraw proprietà è impostata su true. Per altre informazioni sul disegno del proprietario, vedere l'argomento di riferimento sulla OwnerDraw proprietà.

L'evento DrawItem può verificarsi per ogni ListView elemento. Quando la View proprietà è impostata su View.Details, si verificano anche gli DrawSubItem eventi e DrawColumnHeader . In questo caso, è possibile gestire l'evento per disegnare elementi comuni a tutti gli elementi, ad esempio lo sfondo e gestire l'evento DrawItemDrawSubItem per disegnare elementi per singoli elementi secondari, ad esempio i valori di testo. È anche possibile disegnare tutti gli elementi nel ListView controllo usando solo uno dei due eventi, anche se questo potrebbe essere meno pratico. Per disegnare intestazioni di colonna nella visualizzazione dei dettagli, è necessario gestire l'evento DrawColumnHeader .

Nota

A causa di un bug nel controllo Win32 sottostante, l'evento DrawItem si verifica senza eventi accompagnati DrawSubItem una volta per riga nella visualizzazione dei dettagli quando il puntatore del mouse si sposta sulla riga, causando che qualsiasi elemento dipinto in un gestore eventi venga dipinto da uno sfondo personalizzato disegnato in un DrawSubItemDrawItem gestore eventi. Vedere l'esempio nell'argomento OwnerDraw di riferimento per una soluzione alternativa che invalida ogni riga quando si verifica l'evento aggiuntivo. Una soluzione alternativa consiste nell'inserire tutto il codice di disegno personalizzato in un DrawSubItem gestore eventi e disegnare lo sfondo per l'intero elemento (inclusi gli elementi secondari) solo quando il DrawListViewSubItemEventArgs.ColumnIndex valore è 0.

Per ulteriori informazioni sulla gestione degli eventi, consultare gestione e generazione di eventi.

Si applica a

Vedi anche