【发布时间】:2008-12-16 17:30:32
【问题描述】:
ListView 似乎不支持 Scroll 事件。每当滚动列表时,我都需要调用一个函数;我该怎么办?
【问题讨论】:
ListView 似乎不支持 Scroll 事件。每当滚动列表时,我都需要调用一个函数;我该怎么办?
【问题讨论】:
为什么滚动列表时需要调用函数?
如果您在滚动时更改项目,我建议将列表视图设置为虚拟。
或者您可以覆盖列表视图并执行以下操作:
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();
}
}
【讨论】:
似乎最好的方法是布赖恩的解决方案。但是,它只响应滚动条产生的事件,而不响应来自鼠标中键的事件。
如果你改变条件:
if (m.Msg == WM_HSCROLL || m.Msg == WM_VSCROLL)
this.OnScroll();
作者:
if (m.Msg == 0x000c2c9)
this.OnScroll();
现在它会响应列表视图中的所有滚动事件。
【讨论】: