选择winforms树视图项时的水平滚动位置

时间:2009-02-19 10:59:26

标签: c# .net winforms user-interface treeview

我们有一些使用.net Windows.Forms.TreeView的代码。当选择视图中的项目时,代码会

treeView.BeginUpdate();
// ... some stuff ...
SendMessage(treeView.Handle, WM_HSCROLL, SB_LEFT, 0);
treeView.EndUpdate();

这样树视图显示不向右滚动(这是默认行为 - 尽可能多地显示所选项目标签,但是以隐藏一些树结构为代价)。不幸的是,当树视图包含30,000个项目并且在右键单击期间调用此代码并导致上下文菜单需要几秒钟才能显示(足以令人不安)。

如果您删除了Begin / EndUpdate,则会立即显示上下文菜单,但是当您看到视图向右移动然后向后移动左边缘时,会出现恼人的抽搐。摆脱“将其推回左边缘”卷轴的建议遇到了一些阻力。

我已经尝试在树视图上过滤掉SB_RIGHT,但是当控件移动到显示标签时,似乎并没有实际使用它。

当选择不涉及Begin / EndUpdate的项目以及相应的延迟或抽搐时,是否有一种方法可以将树视图保持在当前水平滚动位置?

1 个答案:

答案 0 :(得分:0)

您是否尝试过“按需填充树的节点?”

这应该会导致树中的节点更少,从而更快地处理BeginUpdate。