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 设置,或者这是一个错误?

编辑:我必须使用 View.LargeIcon,因为这样做的目的是在 ListView 中显示图像。我知道我可以从 ListView 中删除所有项目并重新添加它们,但我正在寻找一种不会导致闪烁并且不会丢失我在 ListView 中的滚动位置的方法。

4

1 回答 1

0

只有在 View.List 模式下才能将项目插入 Listview 中的特定位置。下面的代码工作正常。请尝试它是否适合您。如果有用也请标记答案。

ListView1.View = System.Windows.Forms.View.List
ListView1.Items.Add("a")
ListView1.Items.Add("b")
ListView1.Items.Add("c")
ListView1.Items.Add("d")
ListView1.Items.Insert(1, "added")
于 2013-06-25T07:59:15.967 回答