2012-03-28 36 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 2012-03-28 14:55:47

+0

我已經找到了用於在向下箭頭鍵和鍵盤上的結束鍵上進行滾動的其他常量。 – AnasBakez 2012-04-01 11:41:42

+2

太好了。真是個奇蹟。 – anhtv13 2016-03-03 08:45:07

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)); 
     } 
    } 
}