首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >窗口窗体中树视图中的AutoResize属性

窗口窗体中树视图中的AutoResize属性
EN

Stack Overflow用户
提问于 2019-08-15 00:26:05
回答 1查看 216关注 0票数 0

我想根据树节点来调整树视图的大小。当它展开时,我想要显示所有项,但当它折叠时,我想只显示根节点,并降低treeview的高度。我刚刚尝试的是任何类似于自动调整大小的属性,但没有找到。如果有人能帮我解决这个问题,那就太好了。

EN

回答 1

Stack Overflow用户

发布于 2019-08-15 03:01:32

您可以向TreeView发送TVM_GETNEXTITEM消息,将TVGN_LASTVISIBLE作为wParam传入,以获取树视图最后一个节点的句柄。

然后,您可以调用内部NodeFromHandle方法从handle获取节点。然后,您可以使用该节点的Bound属性来查找其界限。最后一项的Top + Height,决定TreeView所需的高度

代码语言:javascript
复制
const int TVM_GETNEXTITEM = 0x1100 + 10;
const int TVGN_LASTVISIBLE = 0x000A;
[System.Runtime.InteropServices.DllImport("user32.dll")]
extern static IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, IntPtr lParam);

void AdjustTreeViewHeight(TreeView treeView)
{
    treeView.Scrollable = false;
    var nodeHandle = SendMessage(treeView.Handle, TVM_GETNEXTITEM, 
        TVGN_LASTVISIBLE, IntPtr.Zero);
    var node = treeView.GetType().GetMethod("NodeFromHandle",
        System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance)
        .Invoke(treeView, new object[] { nodeHandle }) as TreeNode;
    var r = node.Bounds;
    treeView.Height = r.Top + r.Height + 4;
}

在添加/删除节点后调用上述方法,也适用于AfterCollapseAfterExpand

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57498627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档