ListView.DrawItem Zdarzenie
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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
Typ zdarzenia
Przykłady
Poniższy przykład kodu zawiera implementację DrawItem procedury obsługi zdarzeń. Pełny przykład można znaleźć w temacie referencyjnym 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 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
Uwagi
To zdarzenie umożliwia dostosowanie wyglądu kontrolki przy użyciu rysunku ListView właściciela. Jest on zgłaszany tylko wtedy, gdy właściwość jest ustawiona OwnerDraw na true
. Aby uzyskać więcej informacji na temat rysunku OwnerDraw właściciela, zobacz temat odwołania do właściwości.
Zdarzenie DrawItem może wystąpić dla każdego ListView elementu. Gdy właściwość jest ustawiona View na View.Details, wystąpią DrawSubItem również zdarzenia i DrawColumnHeader . W takim przypadku można obsłużyć DrawItem zdarzenie, aby rysować elementy wspólne dla wszystkich elementów, takich jak tło, i obsługiwać DrawSubItem zdarzenie, aby narysować elementy poszczególnych poditemów, takich jak wartości tekstowe. Można również rysować wszystkie elementy w kontrolce ListView przy użyciu tylko jednego z dwóch zdarzeń, chociaż może to być mniej wygodne. Aby narysować nagłówki kolumn w widoku szczegółów, musisz obsłużyć DrawColumnHeader zdarzenie.
Uwaga
Ze względu na usterkę w podstawowej kontrolce DrawItem Win32 zdarzenie występuje bez towarzyszących DrawSubItem zdarzeń raz w wierszu w widoku szczegółów, gdy wskaźnik myszy porusza się nad wierszem, powodując, że wszystko malowane w DrawSubItem procedurze obsługi zdarzeń ma być malowane przez niestandardowe tło rysowane w procedurze DrawItem obsługi zdarzeń. Zobacz przykład w temacie referencyjnym, OwnerDraw aby uzyskać obejście, które unieważnia każdy wiersz po wystąpieniu dodatkowego zdarzenia. Alternatywnym obejściem jest umieszczenie całego niestandardowego kodu rysunku w DrawSubItem procedurze obsługi zdarzeń i malowanie tła całego elementu (w tym poditemów) tylko wtedy, gdy DrawListViewSubItemEventArgs.ColumnIndex wartość to 0.
Aby uzyskać więcej informacji na temat obsługi zdarzeń, zobacz Obsługa i podnoszenie zdarzeń.