Автоматическое изменение размера дерева после коллапса - PullRequest
3 голосов
/ 10 мая 2011

Привет,

Я ищу способ установить ширину древовидного представления либо на максимум, либо на размер самого длинного триода в нем, когда узел свернут или открыт.

Я пытался использовать размер клиента ... но, похоже, это не работает. Есть ли другой способ проверить, какой узел самый длинный и установить TreeView.Width на этот размер?

1 Ответ

1 голос
/ 10 мая 2011

После еще нескольких поисков в сети я нашел следующий способ:

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);
    }
};

Конечно, вы можете использовать это на кнопке, а!

...