C#学习教程:在c#中处理Listview上的滚动事件当列表视图滚动时,我想暂停后台工作并获取滚动区域的当前值,当用户停止滚动列表视图时,根据item的值从项目开始恢复后台工作滚动区域。是否可以处理列表视图的滚动事件?如果是,如何?如果不是,那么根据我上面描述的内容,什么是好的选择?您必须添加对ListView类的支持,以便您可以收到有关滚动事件的通知。在项目中添加一个新类并粘贴下面的代码。编译。将新的列表视图控件从工具箱顶部拖放到窗体上。为新的Scroll事件实现一个处理程序。使用系统;使用System.Windows.Forms;类MyListView:ListView{publiceventScrollEventHandlerScroll;protectedvirtualvoidOnScroll(ScrollEventArgse){ScrollEventHandlerhandler=this.Scroll;如果(处理程序!=null)处理程序(这个,e);}protectedoverridevoidWndProc(refMessagem){base.WndProc(refm);if(m.Msg==0x115){//陷阱WM_VSCROLLOnScroll(newScrollEventArgs((ScrollEventType)(m.WParam.ToInt32()&0xffff),0));}}}请注意,滚动位置(ScrollEventArgs.NewValue)没有任何意义,它取决于ListView中的项目数。我强制它为0。根据您的要求,您希望看到ScrollEventType.EndScroll通知以了解用户何时停止滚动。其他任何东西都可以帮助您检测用户是否开始滚动。例如:ScrollEventTypemLastScroll=ScrollEventType.EndScroll;privatevoidmyListView1_Scroll(objectsender,ScrollEventArgse){if(e.Type==ScrollEventType.EndScroll)scrollEnded();elseif(mLastScroll==mLastScroll;ScrollEvStartType)Endscroll(=e.Type;}请参阅此postListView滚动事件使用本机窗口类侦听列表框上的滚动消息。将应用于任何控件。滚动事件现在可以在.net4.从ListView(m_ListView)捕获Loaded事件并执行以下操作:if(VisualTreeHelper.GetChildrenCount(m_ListView)!=0){Decoratorborder=VisualTreeHelper.GetChild(m_ListView,0)asDecorator;ScrollViewersv=border.ChildasScrollViewer;sv.ScrollChanged+=ScrollViewer_ScrollChanged;}然后,实现你的ScrollViewer_ScrollChanged函数:privatevoidScrollViewer_ScrollChanged(objectsender,ScrollChangedEventArgse){...}按照@AdriaanStander的帖子为他的班级引发滚动事件。内部类ControlScrollListener:NativeWindow,IDisposable{公共事件ControlScrolledEventHandlerControlScrolled;publicdelegatevoidControlScrolledEventHandler(objectsender,EventArgse);私有结构WM_HSCROLL=0x114;私有结构WM_VSCROLL=0x115;私有只读控制_control;publicControlScrollListener(Controlcontrol){_control=control;分配句柄(控制句柄);}protectedboolDisposed{get;放;}publicvoidDispose(){Dispose(true);GC.SuppressFinalize(这个);}privatevoidDispose(booldisposing){if(Disposed)return;if(disposing){//释放仅实现IDisposable的其他托管对象}//释放任何非托管对象//将对象引用设置为nullReleaseHandle();处置=真;}protectedoverridevoidWndProc(refMessagem){HandleControlScrollMessages(m);base.WndProc(refm);}privatevoidHandleControlScrollMessages(Messagem){if(m.Msg==WM_HSCROLL|m.Msg==WM_VSCROLL){if(ControlScrolled!=null){ControlScrolled(_control,newEventArgs());}}}}像这样使用...声明一个字段:privateControlScrollListener_processListViewScrollListener;实例化:_processListViewScrollListener=newControlScrollListener(ProcessesListView);处理程序中的连接:_processListViewScrollListener.ControlScrolled+=ProcessListViewScrollListener_ControlScrolled;处理事件:voidProcessListViewScrollListener_ControlScrolled(objectsender,EventArgshatedo){你需要在事件中提升事件参数以包含更多有用的信息我只需要知道我的控件已经滚动!以上就是C#学习教程:Handlingthescrollingeventonthelistviewinc#分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
