加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

处理列表视图中的滚动事件c#

发布时间:2020-12-15 06:26:15 所属栏目:百科 来源:网络整理
导读:我有一个列表视图,使用后台工作器生成缩略图.当列表视图被滚动时,我想暂停后台工作并获取滚动区域的当前值,当用户停止滚动列表视图时,根据滚动区域的值从项目开始恢复backgroundworker. 是否可以处理列表视图的滚动事件?如果是的话?如果不是那么什么是一个
我有一个列表视图,使用后台工作器生成缩略图.当列表视图被滚动时,我想暂停后台工作并获取滚动区域的当前值,当用户停止滚动列表视图时,根据滚动区域的值从项目开始恢复backgroundworker.

是否可以处理列表视图的滚动事件?如果是的话?如果不是那么什么是一个很好的替代,根据我上面描述的?

解决方法

您必须添加对ListView类的支持,以便您可以收到关于滚动事件的通知.在项目中添加一个新类并粘贴下面的代码.编译.将新的listview控件从工具箱的顶部删除到表单上.实现新的Scroll事件的处理程序.
using System;
using System.Windows.Forms;

    class MyListView : ListView {
      public event ScrollEventHandler Scroll;
      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 == 0x115) { // Trap WM_VSCROLL
          OnScroll(new ScrollEventArgs((ScrollEventType)(m.WParam.ToInt32() & 0xffff),0));
        }
      }
    }

请注意,滚动位置(ScrollEventArgs.NewValue)无意义,这取决于ListView中的项目数量.我迫使它为0.按照您的要求,您希望观看ScrollEventType.EndScroll通知以知道用户何时停止滚动.还有其他帮助您检测到用户开始滚动.例如:

ScrollEventType mLastScroll = ScrollEventType.EndScroll;

private void myListView1_Scroll(object sender,ScrollEventArgs e) {
  if (e.Type == ScrollEventType.EndScroll) scrollEnded();
  else if (mLastScroll == ScrollEventType.EndScroll) scrollStarted();
  mLastScroll = e.Type;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读