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

前端之家收集整理的这篇文章主要介绍了处理列表视图中的滚动事件c#前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_1@我有一个列表视图,使用后台工作器生成缩略图.当列表视图被滚动时,我想暂停后台工作并获取滚动区域的当前值,当用户停止滚动列表视图时,根据滚动区域的值从项目开始恢复backgroundworker.

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

解决方法@H_301_6@
您必须添加对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;
}

猜你在找的C#相关文章