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