Можно ли сделать узел невидимым в Winforms TreeView? - PullRequest
4 голосов
/ 04 декабря 2009

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

Пример. Допустим, я хочу создать TreeView для географии и хочу, чтобы верхние узлы были странами. Я мог бы сделать это:

  • Мир
    • Мексика
    • Япония

Но пользователь хочет:

  • Мексика
  • Япония

Было бы неплохо, если бы я мог создать один TreeView и просто скрыть World, а не два TreeView.

Обновление ==========================

Причина, по которой я хотел это сделать, заключалась в том, что у меня есть подпрограммы, которые рекурсивно обрабатывают TreeView, например, обходят дерево перед обновлением, чтобы сохранить его состояние свертывания / развертывания. Было бы неплохо иметь невидимый верхний узел для начала обработки в.

Ответы [ 2 ]

4 голосов
/ 04 декабря 2009

Нет; и если вы подумаете об этом, разве вы не ожидаете, что все дочерние элементы будут скрыты, если родительский узел был скрыт?

Что бы я сделал, это поддержал бы список за пределами представления и скопировал бы элементы, начиная с указанного узла.

1 голос
/ 04 декабря 2009

Урм, вы можете добавить несколько узлов на корневом уровне. то есть добавление чего-то вроде

treeView1.Nodes.Add("Hello 1").Nodes.Add("Hello 3");
treeView1.Nodes.Add("Hello 2").Nodes.Add("Hello 4");
делает это, по крайней мере, для меня.

EDIT: Если вам действительно нужен корневой узел для обхода дерева (и, мне кажется, вы просто ленивы, потому что у вас нет еще 1 функции), вы можете использовать следующий код, по крайней мере, для .NET 2 (не проверено ни для чего другого). Обратите внимание, что Я НЕ РЕКОМЕНДУЮ ЭТОГО , но эй, вы просили об этом;)

TreeNode realRoot = (TreeNode)treeView1.GetType().InvokeMember("root", BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Instance, null, treeView1, null);

Дочерние узлы realRoot по-прежнему будут возвращать null для своего родителя (именно так разработан код), но если вы должны иметь его для дальнейшего использования, тогда это будет работать:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...