Как сделать событие прокрутки для ListView - PullRequest
1 голос
/ 28 марта 2012

Я хочу создать событие для прокрутки в ListView.

Я нашел что-то, что работает, но оно запускает событие только при использовании полосы прокрутки.Он не реагирует на прокрутку колесиком мыши или стрелками.

private const int WM_HSCROLL = 0x114;
private const int WM_VSCROLL = 0x115;

public event EventHandler Scroll;

protected void OnScroll()
{
   if (this.Scroll != null)
      this.Scroll(this, EventArgs.Empty);
}

protected override void WndProc(ref System.Windows.Forms.Message m)
{
   base.WndProc(ref m);
   if (m.Msg == WM_HSCROLL || m.Msg == WM_VSCROLL )
      this.OnScroll();
}

Какая константа мне нужна для запуска события прокрутки для колеса мыши и кнопки вверх / вниз клавиатуры?

Ответы [ 2 ]

5 голосов
/ 28 марта 2012

Колесо мыши m.Msg значение должно быть:

private const int WM_MOUSEWHEEL = 0x020A;
1 голос
/ 01 апреля 2012

Я нашел другие константы для прокрутки на клавише со стрелкой вниз и на клавише конца на клавиатуре. Это код для CustomListView

using System;
using System.Windows.Forms;

class MyListView : ListView
{
    public event ScrollEventHandler Scroll;
    private const int WM_HSCROLL = 0x114;
    private const int WM_VSCROLL = 0x115;
    private const int MOUSEWHEEL = 0x020A;
    private const int KEYDOWN = 0x0100;

    protected virtual void OnScroll(ScrollEventArgs e)
    {
        ScrollEventHandler handler = this.Scroll;
        if (handler != null) handler(this, e);
    }
    protected override void WndProc(ref Message m)
    {
        base.WndProc(ref m);
        if (m.Msg == MOUSEWHEEL || m.Msg == WM_VSCROLL || (m.Msg == KEYDOWN && (m.WParam == (IntPtr)40 || m.WParam == (IntPtr)35)))
        {
            // Trap WM_VSCROLL 
            OnScroll(new ScrollEventArgs((ScrollEventType)(m.WParam.ToInt32() & 0xffff), 0));
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...