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

问题描述 投票:-1回答:1

如何在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'的局部或参数不能在这个作用域中声明

一个名为'e'的局部或参数不能在这个作用域中声明,因为它是在一个包围的局部作用域中用来定义局部或参数的。

c# winforms listview drag
1个回答
0
投票

错误描述很清楚。你不能使用 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));

试着用另一个变量名

© www.soinside.com 2019 - 2024. All rights reserved.