拖动项目时在列表视图上创建自动滚动

Posted

技术标签:

【中文标题】拖动项目时在列表视图上创建自动滚动【英文标题】:Create auto scroll on listview when dragging over an item 【发布时间】:2020-08-21 11:02:43 【问题描述】:

如何在 listview dragOver 上创建自动滚动。

我是这样做的:

private void groupsCharacterListView_DragOver(object sender, DragEventArgs e)
        
            if (e.Data.GetDataPresent(typeof(List<ListViewItem>)))
            
                groupsCharacterListView.DragOver += RevealMoreItems;
                groupsCharacterListView.DragOver += (source, e) =>
                
                    e.Effect = DragDropEffects.Move;
                ;
            
        
private static void RevealMoreItems(object sender, DragEventArgs e)
        
            var listView = (ListView)sender;

            var point = listView.PointToClient(new Point(e.X, e.Y));
            var item = listView.GetItemAt(point.X, point.Y);
            if (item == null)
                return;

            var index = item.Index;
            var maxIndex = listView.Items.Count;
            var scrollZoneHeight = listView.Font.Height;
            listView.PointToScreen(new Point(e.X, e.Y + 40));

            if (index > 0 && point.Y < scrollZoneHeight)
            
                listView.Items[index - 1].EnsureVisible();
            
            else if (index < maxIndex && point.Y > listView.Height - scrollZoneHeight)
            
                listView.Items[index + 1].EnsureVisible();
            
        

但它给了我以下错误:

不能在此范围内声明名为“e”的本地或参数 因为在封闭的本地范围中使用它来定义本地或 参数。

【问题讨论】:

运行应用程序后,他返回下一个错误:>'InvalidArgument='15' 的值对'index' 无效。参数名称:index' 【参考方案1】:

错误描述很清楚。您不能在此行使用 e,因为它已在您的事件处理程序中使用。

这里是事件处理程序:

private static void RevealMoreItems(object sender, DragEventArgs e) 

在代码中:

var point = listView.PointToClient(new Point(e.X, e.Y));

listView.PointToScreen(new Point(e.X, e.Y + 40));

尝试使用另一个变量名。

【讨论】:

以上是关于拖动项目时在列表视图上创建自动滚动的主要内容,如果未能解决你的问题,请参考以下文章

我想在滚动时在列表视图中添加 500 张图像,并删除当前不在屏幕上的项目

Imageview 在滚动列表视图上自动更改

jQuery UI,可拖动,可放置,自动滚动

C#在拖放时实现ListView中的自动滚动

当视图显示为幻灯片时,自动滚动 UICollectionView 元素。

从 ipad 故事板中的视图控制器控制拖动到工具栏而不是自动滚动故事板