Assembly: System.Windows.Forms (in system.windows.forms.dll)
Public Event DrawItem As DrawListViewItemEventHandler
Dim instance As ListView Dim handler As DrawListViewItemEventHandler AddHandler instance.DrawItem, handler
public event DrawListViewItemEventHandler DrawItem
public: event DrawListViewItemEventHandler^ DrawItem { void add (DrawListViewItemEventHandler^ value); void remove (DrawListViewItemEventHandler^ value); }
/** @event */ public void add_DrawItem (DrawListViewItemEventHandler value) /** @event */ public void remove_DrawItem (DrawListViewItemEventHandler value)
JScript supporta l'utilizzo di eventi ma non la dichiarazione di nuovi.
Questo evento consente di personalizzare l'aspetto di un controllo ListView mediante il disegno personalizzato. L'evento viene generato se la proprietà OwnerDraw è impostata su true. Per ulteriori informazioni sul disegno personalizzato, vedere l'argomento relativo alla proprietà OwnerDraw.
L'evento DrawItem si può verificare per ciascun elemento ListView. Se la proprietà View è impostata su View.Details, si verificano anche gli eventi DrawSubItem e DrawColumnHeader. In tal caso, è possibile gestire l'evento DrawItem per creare parti comuni a tutti gli elementi, ad esempio lo sfondo, nonché gestire l'evento DrawSubItem per creare parti per i singoli elementi secondari, ad esempio valori di testo. È inoltre possibile creare tutti gli elementi nel controllo ListView utilizzando solo uno dei due eventi, sebbene tale procedura possa risultare più complessa. Per creare le intestazioni di colonna nella visualizzazione di dettaglio, è necessario gestire l'evento DrawColumnHeader.
Nota |
|---|
| A causa di un bug presente nel controllo Win32 sottostante, l'evento DrawItem si verifica senza i relativi eventi DrawSubItem ripetuti una volta per riga nella visualizzazione di dettaglio, nel caso in cui il puntatore del mouse si sposti su una riga, facendo in modo che a tutte le parti create in un gestore eventi DrawSubItem venga sovrapposto uno sfondo personalizzato creato in un gestore eventi DrawItem. Vedere l'esempio riportato nell'argomento relativo alla proprietà OwnerDraw per una soluzione alternativa per invalidare ciascuna riga quando si verifica l'evento aggiuntivo. Come metodo alternativo è possibile inserire l'intero codice di creazione personalizzata in un gestore eventi DrawSubItem e disegnare lo sfondo per l'intero elemento (compresi gli elementi secondari) solo se il valore della proprietà DrawListViewSubItemEventArgs.ColumnIndex è 0. |
Per ulteriori informazioni sulla gestione di eventi, vedere Utilizzo degli eventi.
Nell'esempio di codice riportato di seguito viene illustrata un'implementazione di un gestore eventi DrawItem. Per un esempio completo, vedere l'argomento relativo a OwnerDraw.
' 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
// 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: void listView1_DrawItem( Object^ /*sender*/, DrawListViewItemEventArgs^ e ) { if ( (e->State & ListViewItemStates::Selected) != (ListViewItemStates)0 ) { // Draw the background for a selected item. e->Graphics->FillRectangle( Brushes::Maroon, e->Bounds ); e->DrawFocusRectangle(); } else { // Draw the background for an unselected item. LinearGradientBrush^ myBrush = gcnew LinearGradientBrush( e->Bounds,Color::Orange,Color::Maroon,LinearGradientMode::Horizontal ); try { e->Graphics->FillRectangle( myBrush, e->Bounds ); } finally { if ( myBrush ) delete (IDisposable^)myBrush; } } 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 SP4, Windows CE, Windows Millennium Edition, Windows Mobile per Pocket PC, Windows Mobile per Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema.
Nota