I'm not a VB guy but in C# I do it this way:
Some Win32 native functions:
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int GetScrollPos(IntPtr hWnd, int nBar);
[DllImport("user32.dll", CharSet = CharSet.Unicode)]
public static extern int SetScrollPos(IntPtr hWnd, int nBar, int nPos, bool bRedraw);
private const int SB_HORZ = 0x0;
private const int SB_VERT = 0x1;
A method which returns a point for the current scroll position:
private Point GetTreeViewScrollPos(TreeView treeView)
{
return new Point(
GetScrollPos(treeView.Handle, SB_HORZ),
GetScrollPos(treeView.Handle, SB_VERT));
}
A method to set the scroll position:
private void SetTreeViewScrollPos(TreeView treeView, Point scrollPosition)
{
SetScrollPos(treeView.Handle, SB_HORZ, scrollPosition.X, true);
SetScrollPos(treeView.Handle, SB_VERT, scrollPosition.Y, true);
}
Then when you update your tree, do the following:
BeginUpdate();
Point ScrollPos = GetTreeViewScrollPos(treeMain);
// write your update code here
SetTreeViewScrollPos(treeMain, ScrollPos);
EndUpdate();
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…