Создавать автоматическую прокрутку в списке при перетаскивании элемента - PullRequest
0 голосов
/ 06 мая 2020

Как создать автоматическую прокрутку при перетаскивании списка просмотра.

Я сделал это следующим образом:

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' не может быть объявлен в этой области, потому что он используется во включающей локальной области для определения локального параметра или.

1 Ответ

0 голосов
/ 07 мая 2020

Описание ошибки вполне понятно. Вы не можете использовать 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));

Попробуйте использовать другое имя переменной.

...