我在开发中遇到这么一个问题:如果结点数过多时(近万个),使用TreeView控件加载时速度非常慢。我就想能否做到一开始只加载部分结点,当用户翻页时再加载需要的新结点。但我翻了一个TreeView的资料,没有发现有针对滚动条的事件。于是就自己重载了TreeView控件,添加了对滚动条事件的支持。
添加滚动条事件支持
主要的实现代码很简单,如下所示:
public
class
MyTreeView : System.Windows.Forms.TreeView
{
private const int WM_VSCROLL = 0x0115; //滚动条事件
private const int WM_MOUSEWHEEL = 0x020A; //鼠标滚轮事件
private const int SB_ENDSCROLL = 8; //滚动结束标志
public event EventHandler VerticalScrolled;
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_VSCROLL || m.Msg == WM_MOUSEWHEEL)
{
if (m.WParam.ToInt32() == SB_ENDSCROLL)
{
VerticalScrolled(this, new EventArgs());
}
}
base.WndProc(ref m);
}
本文介绍了在C#开发中,为解决大量结点导致TreeView控件加载速度慢的问题,作者通过重载TreeView控件并添加滚动条事件支持,实现了按需加载结点的功能。文中给出了关键代码,包括如何监听滚动条事件以及动态添加和定位当前屏幕区域内最后一个树结点的方法。

最低0.47元/天 解锁文章
262

被折叠的 条评论
为什么被折叠?



