投稿者 UUQ  (社会人) 投稿日時 2013/5/4 22:50:05
ListViewに画像を表示させるプログラムを作成中なのですがどうしても解決方法が分からないエラーが出てしまうので質問させてください

仮想リストビューのLargeIcon,SmallIcon時にShiftキーを押しながら(マウスによる選択ではエラーは出ません)アイテムを複数選択した時に
起点のアイテムを通過するとエラーが出てしまいます。
(「Argumentexception startIndex 値に endIndex 値より大きい値を指定することはできません。」となってしまいます。(LargeIcon,SmallIcon以外の場合はエラーが出ません))

XP Visualスタイルを解除するとエラーは出なくなるのですが解除はしたくありません。
なのでVisualスタイルのままでこの問題を解決する方法が知りたいです。よろしくお願いします。

環境はVS2008でフレームワークは.netframework3.5を使用しております

下記はエラーを再現させるコードです。

Imports System.Windows.Forms

Public Class TEST
    Inherits System.Windows.Forms.Form
    Private components As System.ComponentModel.IContainer
    Public Sub New()
        Me.components = New System.ComponentModel.Container
        Me.ListView1 = New System.Windows.Forms.ListView
        Me.ImageList1 = New System.Windows.Forms.ImageList(Me.components)
        Me.SuspendLayout()
        '
        'ListView1
        '
        Me.ListView1.Location = New System.Drawing.Point(15, 10)
        Me.ListView1.Name = "ListView1"
        Me.ListView1.Size = New System.Drawing.Size(600, 400)
        Me.ListView1.SmallImageList = Me.ImageList1
        Me.ListView1.TabIndex = 0
        Me.ListView1.UseCompatibleStateImageBehavior = False
        Me.ListView1.VirtualMode = True
        Me.ListView1.VirtualListSize = 20

        '
        'ImageList1
        '
        Me.ImageList1.ColorDepth = System.Windows.Forms.ColorDepth.Depth8Bit
        Me.ImageList1.ImageSize = New System.Drawing.Size(16, 16)
        Me.ImageList1.TransparentColor = System.Drawing.Color.Transparent
        '
        'Form1
        '
        Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 12.0!)
        Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
        Me.ClientSize = New System.Drawing.Size(630, 420)
        Me.Controls.Add(Me.ListView1)
        Me.Name = "Form1"
        Me.Text = "Form1"
        Me.ResumeLayout(False)

    End Sub

    Private Sub ListView1_RetrieveVirtualItem(ByVal sender As Object, ByVal e As System.Windows.Forms.RetrieveVirtualItemEventArgs) Handles ListView1.RetrieveVirtualItem
        e.Item = New ListViewItem(e.ItemIndex.ToString)
    End Sub

    Friend WithEvents ListView1 As System.Windows.Forms.ListView
    Friend WithEvents ImageList1 As System.Windows.Forms.ImageList
End Class

Module Program
    <STAThread()> _
    Sub Main()
        Dim _TEST_ As New TEST
        'XP Visualスタイルを有効にした状態でShiftを押しながらListViewItemを選択した場合に起点のアイテムを通過するときに
        'startIndex 値に endIndex 値より大きい値を指定することはできません。となってしまう
        'LargeIcon,SmallIconの時のみ↑のエラーが出てしまう。
        ' __
        ' |11| 12 13 14 15 (11にフォーカスがある状態)
        '   ̄
        '       →
        ' ________
        ' |11 12 13 14 15| (Shiftを押しながら15まで選択)
        '   ̄ ̄ ̄ ̄ ̄ ̄
        '
        ' ____ ←
        ' |11 12| 13 14 15 (上の状態からShiftを押したまま11まで戻るとエラーが発生する)
        '   ̄ ̄
        '
        '
        Application.EnableVisualStyles() '##この行をコメントアウトするとエラーにならない
        Application.Run(_TEST_)
    End Sub
End Module