ListView似乎不支持Scroll事件。我需要在列表滚动时调用一个函数;我会怎么做呢?如何侦听ListView中的滚动?
1
A
回答
6
为什么在列表滚动时需要调用函数?
如果您正在更改项目,因为它滚动我建议将列表视图设置为虚拟。
或者你可以重写ListView和做到这一点:
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();
}
}
0
下面是尊重每个ListView
的显示模式的解决方案:
我们依靠的事实,作为ListView
滚动时,项目的位置变化。如果我们检查第一个ListViewItem
的Bounds
属性中的更改,我们可以跟踪是否发生了移动。
你需要一个Timer
控件添加到同一形成你ListView
并且它的Enabled
属性设置为True
(这意味着它会定期火而不必Start
版)。还要添加一个私有变量到您的表单类来记录第一个项目的Bounds
。
private Rectangle _firstItemBounds = null;
当填充您的ListView
,这个变量设置为第一个项目的Bounds
。例如:
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 1000; i++)
{
listView1.Items.Add(new ListViewItem("Item " + i));
}
_firstItemBounds = listView1.Items[0].Bounds;
}
然后添加一个处理程序Timer
的Tick
事件:
private void timer1_Tick(object sender, EventArgs e)
{
if (listView1.Items[0] == null)
{
return;
}
Rectangle bounds = listView1.Items[0].Bounds;
if (bounds != _firstItemBounds)
{
_firstItemBounds = bounds;
// Any scroll logic here
// ...
}
}
默认为100ms的Timer Interval
似乎为我工作得很好,但你可能需要调整,使之适合你的申请。
我希望这会有所帮助。
4
看来,最好的办法是布赖恩的解决方案。但是,它只响应由滚动条生成的事件,但不响应鼠标中键的事件。
如果更改条件:
if (m.Msg == WM_HSCROLL || m.Msg == WM_VSCROLL)
this.OnScroll();
由:
if (m.Msg == 0x000c2c9)
this.OnScroll();
现在respods在列表视图所有滚动事件。
相关问题
- 1. 如何让borderContainer侦听滚动事件?
- 2. Lua Corona - 如何在滑动过程中侦听widget.newScrollView侦听器
- 3. Java:如何注册侦听JFrame运动的侦听器
- 4. “滚动”事件侦听器不工作
- 5. 滚动查看和触摸侦听器
- 6. 如何添加事件侦听器来滚动内容?
- 7. 如何在ListView中使用侦听器方法?
- 8. 滚动窗格中所有复选框的操作侦听器?
- 9. ASPNET CORE如何启动以侦听httprequest?
- 10. RecyclerView滚动侦听器的方法onscolled调用自动不滚动
- 11. 如何几个滚动监听绑定在一个ListView?
- 12. 鼠标侦听器和动作侦听器的区别?
- 13. 如何设置侦听器?
- 14. 如何侦听卸载apk?
- 15. 如何禁用GridView中的ListView滚动条和滚动条
- 16. 如何在动作监听器上控制焦点侦听器?
- 17. ListView中的CheckBox侦听器的业务逻辑
- 18. 如何在android listview中滚动工作?
- 19. 如何在触摸屏中滚动ListView
- 20. 如何使用动作侦听器中设置的变量
- 21. 如何在不同的类中使用动作侦听器?
- 22. 如何在WPF中侦听System.exit()错误?
- 23. 触摸侦听器侦听边距
- 24. Android的ListView动态按钮为每一行调用动态侦听器
- 25. 使“scrollLeft”/“scrollTop”更改不会触发滚动事件侦听器
- 26. 当有OnClickListener侦听时,滚动不起作用
- 27. HTML 5画布滚动事件侦听器不工作
- 28. 将滚动条侦听器添加到JOGL项目
- 29. extjs4 xtype:容器添加滚动侦听器
- 30. 将滚动侦听器添加到RecyclerView适配器