2

ListView 似乎不支持 Scroll 事件。每当滚动列表时,我都需要调用一个函数;我该怎么做呢?

4

2 回答 2

6

为什么滚动列表时需要调用函数?

如果您在滚动时更改项目,我建议将列表视图设置为虚拟。

或者您可以覆盖列表视图并执行以下操作:

public class TestListView : System.Windows.Forms.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();
    }
}
于 2008-12-17T19:50:50.283 回答
4

似乎最好的方法是布赖恩的解决方案。但是,它只响应滚动条生成的事件,而不响应来自鼠标中键的事件。

如果您更改条件:

   if (m.Msg == WM_HSCROLL || m.Msg == WM_VSCROLL) 
             this.OnScroll();

经过:

   if (m.Msg == 0x000c2c9) 
             this.OnScroll();

现在它响应列表视图中的所有滚动事件。

于 2010-08-05T13:03:12.527 回答