2012-03-28 4 views
1

Я хочу сделать событие для прокрутки в ListView.Как сделать событие прокрутки для 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(); 
} 

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

ответ

5

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

private const int WM_MOUSEWHEEL = 0x020A; 
+0

большое спасибо – AnasBakez

+0

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

+2

Отлично. Какое чудо. – anhtv13

1

Я нашел другие константы для создания свитка на клавишу со стрелкой вниз и торцевой ключ на keyboard.this является код 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)); 
     } 
    } 
} 
Смежные вопросы