ListView.DrawItem Evento
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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 de evento
Exemplos
O exemplo de código a seguir fornece uma implementação de um DrawItem manipulador de eventos. Para obter o exemplo completo, consulte o OwnerDraw tópico de referência.
// 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
Comentários
Este evento permite personalizar a aparência de um controle ListView usando o desenho do proprietário. Ele é gerado somente quando a OwnerDraw propriedade é definida true
como . Para obter mais informações sobre o desenho do proprietário, consulte o tópico de referência de OwnerDraw propriedade.
O DrawItem evento pode ocorrer para cada ListView item. Quando a View propriedade é definida como View.Details, os DrawSubItem eventos e DrawColumnHeader também ocorrem. Nesse caso, você pode manipular o DrawItem evento para desenhar elementos comuns a todos os itens, como a tela de fundo, e manipular o DrawSubItem evento para desenhar elementos para subitens individuais, como valores de texto. Você também pode desenhar todos os itens no ListView controle usando apenas um dos dois eventos, embora isso possa ser menos conveniente. Para desenhar cabeçalhos de coluna na exibição de detalhes, você deve manipular o DrawColumnHeader evento.
Observação
Devido a um bug no controle Win32 subjacente, o DrawItem evento ocorre sem acompanhar DrawSubItem eventos uma vez por linha na exibição de detalhes quando o ponteiro do mouse se move sobre a linha, fazendo com que qualquer coisa pintada em um DrawSubItem manipulador de eventos seja pintada por um plano de fundo personalizado desenhado em um DrawItem manipulador de eventos. Consulte o exemplo no OwnerDraw tópico de referência para obter uma solução alternativa que invalida cada linha quando o evento extra ocorre. Uma solução alternativa é colocar todo o código de desenho personalizado em um DrawSubItem manipulador de eventos e pintar a tela de fundo para todo o item (incluindo subitens) somente quando o DrawListViewSubItemEventArgs.ColumnIndex valor for 0.
Para obter mais informações sobre como lidar com eventos, consulte Manipulando e gerando eventos.