Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ListViewItemCollection。是否插入损坏的?_C#_.net_Listview_Controls - Fatal编程技术网

C# ListViewItemCollection。是否插入损坏的?

C# ListViewItemCollection。是否插入损坏的?,c#,.net,listview,controls,C#,.net,Listview,Controls,我试图允许用户将图像文件拖动到ListView控件中,并在用户插入文件的任何位置显示图像。但是,出于某种原因,ListViewItemCollection.Insert似乎不会在指定的索引处插入项,而是将其添加到列表的末尾。我使用的自定义控件继承自ListView,该控件在将文件拖放到ListView时引发事件: //In my ListView control var objPaths = (string[])(drgevent.Data.GetData(DataFormats.FileDro

我试图允许用户将图像文件拖动到ListView控件中,并在用户插入文件的任何位置显示图像。但是,出于某种原因,
ListViewItemCollection.Insert
似乎不会在指定的索引处插入项,而是将其添加到列表的末尾。我使用的自定义控件继承自ListView,该控件在将文件拖放到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);
    }
}
添加的项仍会转到ListView的末尾

有什么想法吗?我是否缺少ListView设置,或者这是一个bug


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

只有在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")

啊,这确实解决了问题,但是我需要在ListView中显示图像,所以我必须使用View=View.LargeIcon。还有别的办法吗?将其设置为View.List,然后插入该项,然后将其设置回View.LargeIcon可以工作,但我丢失了滚动位置,这是我试图避免的全部问题(即,清除列表并从头开始重新填充)。
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")