winforms 折叠后自动调整树视图的宽度

8fq7wneg  于 2022-11-30  发布在  其他
关注(0)|答案(1)|浏览(122)

我正在寻找一种方法来设置一个树视图的宽度要么是它的最大值,要么是其中最长的树节点的大小,每当一个节点被折叠或打开。
我试过使用clientsize,但似乎不起作用。是否有其他方法可以检查哪个节点最长,并将TreeView.Width设置为该大小?

pkln4tw6

pkln4tw61#

经过一些更多的搜索在网上我发现这样:

private const int GWL_STYLE = -16;
private const int WS_VSCROLL = 0x00200000;
private const int WS_HSCROLL = 0x00100000;

[DllImport("user32.dll", ExactSpelling = false, CharSet = CharSet.Auto)]
private static extern int GetWindowLong(IntPtr hWnd, int nIndex);

以及:

//tree = instance of a treeview
tree.AfterExpand += (s, ea) =>
{
    int style = GetWindowLong(tree.Handle, GWL_STYLE);
    while ((style & WS_HSCROLL) != 0)
    {
        tree.Width++;
        style = GetWindowLong(tree.Handle, GWL_STYLE);
    }
};

当然你也可以在按钮上使用这个!

相关问题