ListView.DrawItem Událost
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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
Event Type
Příklady
Následující příklad kódu poskytuje implementaci obslužné rutiny DrawItem události. Úplný příklad najdete v OwnerDraw tématu s referenčními informacemi.
// 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
Poznámky
Tato událost umožňuje přizpůsobit vzhled ovládacího prvku pomocí výkresu ListView vlastníka. Vyvolá se pouze v OwnerDraw případech, kdy je vlastnost nastavena na true
hodnotu . Další informace o výkresu vlastníka najdete v tématu s referenčními informacemi o OwnerDraw vlastnosti.
Událost DrawItem může nastat pro každou ListView položku. Když je vlastnost nastavená View na View.Details, dojde také k událostem DrawSubItem a DrawColumnHeader . V takovém případě můžete událost zpracovat DrawItem tak, že nakreslíte prvky společné pro všechny položky, například pozadí, a zpracovat DrawSubItem událost a nakreslit prvky pro jednotlivé podřízené položky, jako jsou textové hodnoty. Můžete také nakreslit všechny položky v ovládacím ListView prvku pomocí pouze jedné ze dvou událostí, i když to může být méně pohodlné. Pokud chcete nakreslit záhlaví sloupců v zobrazení podrobností, musíte událost zpracovat DrawColumnHeader .
Poznámka
Z důvodu chyby v podkladovém ovládacím prvku DrawItem Win32 dojde k události bez doprovodných DrawSubItem událostí jednou za řádek v zobrazení podrobností, když se ukazatel myši přesune přes řádek, což způsobí, že cokoli malované v DrawSubItem obslužné rutině události bude vykresleno vlastním pozadím nakresleným v obslužné rutině DrawItem události. V příkladu v referenčním OwnerDraw tématu najdete alternativní řešení, které ruší platnost každého řádku, když dojde k další události. Alternativním řešením je vložit veškerý vlastní kód výkresu do obslužné DrawSubItem rutiny události a vykreslit pozadí pro celou položku (včetně podřízených položek) pouze v případě, že DrawListViewSubItemEventArgs.ColumnIndex je hodnota 0.
Další informace o zpracování událostí najdete v tématu Zpracování a vyvolávání událostí.