ListView.DrawItem イベント


ListView が描画され、OwnerDraw プロパティが true に設定されているときに発生します。Occurs when a ListView is drawn and the OwnerDraw property is set to true.

 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 

次のコード例では、DrawItem イベントハンドラーの実装を示します。The following code example provides an implementation of a DrawItem event handler. 完全な例については、OwnerDraw リファレンストピックを参照してください。For the complete example, see the OwnerDraw reference topic.

// 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);
        // 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)
' 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)


        ' Draw the background for an unselected item.
        Dim brush As New LinearGradientBrush(e.Bounds, Color.Orange, _
            Color.Maroon, LinearGradientMode.Horizontal)
            e.Graphics.FillRectangle(brush, e.Bounds)
        End Try

    End If

    ' Draw the item text for views other than the Details view.
    If Not Me.listView1.View = View.Details Then
    End If

End Sub


このイベントを使用すると、オーナー描画を使用して @no__t 0 コントロールの外観をカスタマイズできます。This event lets you customize the appearance of a ListView control using owner drawing. この値は、OwnerDraw プロパティが true に設定されている場合にのみ発生します。It is raised only when the OwnerDraw property is set to true. オーナー描画の詳細については、「OwnerDraw プロパティのリファレンス」を参照してください。For more information about owner drawing, see the OwnerDraw property reference topic.

@No__t-0 イベントは、各 ListView 項目に対して発生する可能性があります。The DrawItem event can occur for each ListView item. @No__t-0 プロパティが View.Details に設定されている場合、DrawSubItemDrawColumnHeader のイベントも発生します。When the View property is set to View.Details, the DrawSubItem and DrawColumnHeader events also occur. この場合は、DrawItem イベントを処理して、背景などのすべての項目に共通の要素を描画し、テキスト値などの個々のサブ項目の要素を描画するための DrawSubItem イベントを処理できます。In this case, you can handle the DrawItem event to draw elements common to all items, such as the background, and handle the DrawSubItem event to draw elements for individual subitems, such as text values. また、2つのイベントのいずれか1つだけを使用して、@no__t 0 コントロール内のすべての項目を描画することもできます。ただし、これは便利ではありません。You can also draw all items in the ListView control using only one of the two events, although this may be less convenient. 詳細ビューで列ヘッダーを描画するには、DrawColumnHeader イベントを処理する必要があります。To draw column headers in the details view, you must handle the DrawColumnHeader event.


基になる Win32 コントロールのバグのため、DrawItem イベントは、マウスポインターが行の上に移動したときに詳細ビューの行ごとに1つの @no__t イベントを伴わずに発生します。これにより、DrawSubItem イベントハンドラーで描画されたものが、によって描画されます。@no__t 3 イベントハンドラーで描画されたカスタム背景。Because of a bug in the underlying Win32 control, the DrawItem event occurs without accompanying DrawSubItem events once per row in the details view when the mouse pointer moves over the row, causing anything painted in a DrawSubItem event handler to be painted over by a custom background drawn in a DrawItem event handler. 余分なイベントが発生したときに各行を無効にする回避策については、OwnerDraw リファレンストピックの例を参照してください。See the example in the OwnerDraw reference topic for a workaround that invalidates each row when the extra event occurs. もう1つの回避策は、すべてのカスタム描画コードを @no__t 0 のイベントハンドラーに配置し、項目全体 (サブ項目を含む) の背景を描画することです (DrawListViewSubItemEventArgs.ColumnIndex の値が0の場合のみ)。An alternative workaround is to put all your custom drawing code in a DrawSubItem event handler and paint the background for the entire item (including subitems) only when the DrawListViewSubItemEventArgs.ColumnIndex value is 0.

イベントの処理の詳細については、「処理とイベントの発生」を参照してください。For more information about handling events, see Handling and Raising Events.