C # Заполнить древовидное представление с помощью пользовательских структур - PullRequest
0 голосов
/ 01 октября 2018

Как я могу заполнить древовидные представления пользовательскими древовидными структурами?То, что я пытаюсь сделать:

У меня есть класс Actor, содержащий массив Actors (как дочерние элементы, каждый из которых содержит другой массив дочерних элементов и т. Д.), И он имеет Actor какродитель.Я просто хочу отобразить их в виде дерева.Класс актера выглядит так:

class Actor
{
   public List<Actor> Children {get; set;} = new List<Actor>();
   public Actor Parent {get; set;}

   public Actor[] GetChildren()
   {
      return Children.ToArray();
   }
}


private void UpdateSceneryTree()
{
            SceneryStructureView.Nodes.Clear();
            var root = new TreeNode(KerboEngine.CurrentScenery.Name) ImageIndex = 1, SelectedImageIndex = 1 };
            ListScenery(root);
            SceneryStructureView.Nodes.Add(root);
}

        private void ListScenery(TreeNode root)
        {
            foreach (var sco in KerboEngine.CurrentScenery.RootStructures) //root structures are all roots which have no parent.
            {
                TreeNode n = new TreeNode(sco.Name) { Tag = sco };
                List<TreeNode> ns = new List<TreeNode>();
                foreach (var a in sco.GetChilds()) //here we get all childs of them
                    ns.Add(new TreeNode(a.Name) { Tag = a });
                n.Nodes.AddRange(ns.ToArray());
                root.Nodes.Add(n);
            }
        }

Этот код работает, но только на двух глубинах:

enter image description here

Likeвы видите, что у Child1 в Construct 2 должно быть 2 дочерних элемента, я могу видеть их с сеткой свойств, но не в виде дерева.

Кто-нибудь знает решение для получения и перечисления дерева в неограниченных глубинах?

...