【问题标题】:How do I listen for scrolling in a ListView?如何监听 ListView 中的滚动?
【发布时间】:2008-12-16 17:30:32
【问题描述】:

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

【问题讨论】:

    标签: c# winforms listview


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 您还必须添加 WM_MOUSEWHEEL 否则将忽略滚轮滚动。
    【解决方案2】:

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

    如果你改变条件:

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

    作者:

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

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

    【讨论】:

    • 你能告诉我C2C9是什么吗?所有 Windows 消息都有一个名称。
    猜你喜欢
    • 2015-05-30
    • 2019-12-26
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 1970-01-01
    • 2015-09-20
    • 1970-01-01
    • 2016-08-18
    相关资源
    最近更新 更多