0

ユーザーが画像ファイルを ListView コントロールにドラッグして、ユーザーがファイルを挿入した場所に画像を表示できるようにしようとしています。ただし、何らかの理由ListViewItemCollection.Insertで、指定されたインデックスにアイテムを挿入するのではなく、リストの最後に追加するようです。ファイルがドロップされたときにイベントを発生させる ListView から継承するカスタム コントロールを使用しています。

//In my ListView control
var objPaths = (string[])(drgevent.Data.GetData(DataFormats.FileDrop));
if (objPaths != null && objPaths.Length > 0)
{
     var e = new DragDropFileEventArgs(objPaths, targetIndex);
     OnDropFile(e);
}

そして、私はこれを私の形で使用しています:

//Handle drag 'n dropped files
void imageListView_DropFile(object sender, DragDropFileEventArgs e)
{
    //Loads the files from e.Paths and returns the images added
    var addedImages = myListOfImages.LoadFromFiles(e.Paths, e.Index);

    for (int i = 0; i < addedImages.Length; i++)
    {
        var img = addedImages[i];
        ListViewItem.LargeImageList.Images.Add(img.Image);
        ListViewItem item = new ListViewItem((e.Index + i).ToString(), _imageList.Images.Count - 1);
        imageListView.Items.Insert(e.Index + i, item);
    }
}

なんらかの理由で、項目が の末尾に追加されていimageListView.Itemsます。

次のコードだけを使用して、新しいプロジェクトでこれを再現できます。

        listView1.Items.Add("a");
        listView1.Items.Add("b");
        listView1.Items.Add("c");
        listView1.Items.Add("d");
        listView1.Items.Insert(1, "added");

追加された項目は引き続き ListView の末尾に移動します。

何か案は?ListView の設定がありませんか、それともバグですか?

編集:これのポイントはListViewに画像を表示することだったので、View.LargeIconを使用する必要があります。ListView からすべての項目を削除して、1 つずつ再追加できることはわかっていますが、点滅を引き起こさず、ListView のスクロール位置を失わない方法を探していました。

4

1 に答える 1