Прокрутка DataGridView с помощью мыши - PullRequest
6 голосов
/ 21 ноября 2011

Итак, мы все знакомы с функциональностью щелчка и удерживания кнопки мыши, а затем перемещения мыши к краю сетки, прокрутки столбцов / строк и увеличения размера.

У меня естьэлемент управления на основе DataGridView, который мне пришлось отключить MultiSelect и самостоятельно обработать процесс выбора из-за проблем с производительностью, и теперь функция прокрутки click + hold также отключена.

Любые предложения о том, как писатьназад в этой функциональности?

Я думал об использовании чего-то простого, такого как событие MouseLeave, но я не уверен, как определить, какое положение он оставил, а также реализовать динамическую скорость прокрутки.

Ответы [ 3 ]

8 голосов
/ 29 мая 2012

Просто добавьте этот код в Form1_Load

DataGridView1.MouseWheel += new MouseEventHandler(DataGridView1_MouseWheel);

И этот для события MouseWheel

void DataGridView1_MouseWheel(object sender, MouseEventArgs e)
{
    int currentIndex = this.DataGridView1.FirstDisplayedScrollingRowIndex;
    int scrollLines = SystemInformation.MouseWheelScrollLines;

    if (e.Delta > 0) 
    {
        this.DataGridView1.FirstDisplayedScrollingRowIndex 
            = Math.Max(0, currentIndex - scrollLines);
    }
    else if (e.Delta < 0)
    {
        this.DataGridView1.FirstDisplayedScrollingRowIndex 
            = currentIndex + scrollLines;
    }
}
3 голосов
/ 26 апреля 2016

Полный ответ Вам необходимо установить Focus Datagridview

private void DataGridView1_MouseEnter(object sender, EventArgs e)
        {
            DataGridView1.Focus();
        }

then Add Mouse wheel event in Load function 
DataGridView1.MouseWheel += new MouseEventHandler(DataGridView1_MouseWheel);

Finally Create Mouse wheel function

void DataGridView1_MouseWheel(object sender, MouseEventArgs e)
{
    int currentIndex = this.DataGridView1.FirstDisplayedScrollingRowIndex;
    int scrollLines = SystemInformation.MouseWheelScrollLines;

    if (e.Delta > 0) 
    {
        this.DataGridView1.FirstDisplayedScrollingRowIndex = Math.Max(0, currentIndex - scrollLines);
    }
    else if (e.Delta < 0)
    {
        if (this.DataGridView1.Rows.Count > (currentIndex + scrollLines))
            this.DataGridView1.FirstDisplayedScrollingRowIndex = currentIndex + scrollLines;
    }
}

У меня отлично работает.

1 голос
/ 13 октября 2015

Исключение System.ArgumentOutOfRangeException не возникает, если:

void DataGridView1_MouseWheel(object sender, MouseEventArgs e)
{
    int currentIndex = this.DataGridView1.FirstDisplayedScrollingRowIndex;
    int scrollLines = SystemInformation.MouseWheelScrollLines;

    if (e.Delta > 0) 
    {
        this.DataGridView1.FirstDisplayedScrollingRowIndex = Math.Max(0, currentIndex - scrollLines);
    }
    else if (e.Delta < 0)
    {
        if (this.DataGridView1.Rows.Count > (currentIndex + scrollLines))
            this.DataGridView1.FirstDisplayedScrollingRowIndex = currentIndex + scrollLines;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...