gpt4 book ai didi

.net - 保持 TreeView 的滚动位置

转载 作者:行者123 更新时间:2023-12-03 11:46:40 63 4
gpt4 key购买 nike

如何在 .NET 应用程序中保持 TreeView 控件的滚动位置?例如,我有一个树形 View 控件,并经历了一个向其添加各种节点的过程,并将它们固定在底部。在此过程中,我可以滚动浏览 TreeView 并查看不同的节点。问题是当过程完成时, TreeView 滚动到最底部。

看来调用 treenode.Expand() 是让我偏离轨道的原因。当父节点展开时,它会获得焦点。

有没有解决的办法?如果我在进程运行时查看特定节点,我不希望它在进程完成后跳到我身上。

最佳答案

我不是 VB 人,但在 C# 中我是这样做的:
一些 Win32 原生函数:

[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;
返回当前滚动位置的点的方法:
private Point GetTreeViewScrollPos(TreeView treeView)
{
return new Point(
GetScrollPos(treeView.Handle, SB_HORZ),
GetScrollPos(treeView.Handle, SB_VERT));
}
设置滚动位置的方法:
private void SetTreeViewScrollPos(TreeView treeView, Point scrollPosition)
{
SetScrollPos(treeView.Handle, SB_HORZ, scrollPosition.X, true);
SetScrollPos(treeView.Handle, SB_VERT, scrollPosition.Y, true);
}
然后,当您更新树时,请执行以下操作:
BeginUpdate();
Point ScrollPos = GetTreeViewScrollPos(treeMain);
// write your update code here
SetTreeViewScrollPos(treeMain, ScrollPos);
EndUpdate();

关于.net - 保持 TreeView 的滚动位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/332788/

63 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com