ListViewItemCollection.Insert坏了吗?

时间:2013-06-25 07:32:42

标签: c# .net listview controls

我试图允许用户将图像文件拖到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中的滚动位置。

1 个答案:

答案 0 :(得分: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")