ListView.DrawItem イベント

定義

ListView が描画され、OwnerDraw プロパティが true に設定されているときに発生します。

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 

イベントの種類

次のコード例では、イベント ハンドラーの実装を DrawItem 示します。 完全な例については、リファレンス トピックを 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

注釈

このイベントを使用すると、所有者描画を使用してコントロールの ListView 外観をカスタマイズできます。 プロパティが に設定されている場合 OwnerDraw にのみ発生します true。 所有者描画の詳細については、プロパティリファレンスのトピックを OwnerDraw 参照してください。

イベントは DrawItem 各項目 ListView に対して発生する可能性があります。 プロパティが ViewView.Details設定されている場合、 DrawSubItem イベントと DrawColumnHeader イベントも発生します。 この場合、イベントを DrawItem 処理して背景などのすべての項目に共通の要素を描画し、イベントを DrawSubItem 処理してテキスト値などの個々のサブ項目の要素を描画できます。 また、2 つのイベントのうち 1 つだけを ListView 使用してコントロール内のすべての項目を描画することもできますが、これはあまり便利ではない場合があります。 詳細ビューで列ヘッダーを描画するには、 イベントを処理する DrawColumnHeader 必要があります。

注意

基になる Win32 コントロールのバグのため、マウス ポインターが行の上を移動すると、 DrawItem 詳細ビューで 1 行に 1 回イベントが付随 DrawSubItem することなくイベントが発生し、イベント ハンドラーに DrawSubItem 描画されたカスタム背景 DrawItem によってイベント ハンドラーに描画されたものが描画されます。 余分なイベントが OwnerDraw 発生したときに各行を無効にする回避策については、リファレンス トピックの例を参照してください。 別の回避策として、すべてのカスタム描画コードをイベント ハンドラーに DrawSubItem 配置し、値が 0 の場合にのみアイテム全体 (サブ項目を含む) の背景を DrawListViewSubItemEventArgs.ColumnIndex 描画します。

イベントの処理の詳細については、「処理とイベントの発生」を参照してください。

適用対象

こちらもご覧ください