NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 학습
  • 매뉴얼

    학습


    C# 재귀 함수 - TreeView 에서 전체 TreeNode 를 가져오는 방법. (How to recursive find Tree…

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. TreeView에서 Nodes로 전체 목록을 가져올거 같지만, 1 Depth만 가져옵니다. Node 하위로 Node들이 추가되어 있거나 여러 Depth를 가지는 경우에는 전체 Node를 가져올 수 없습니다. 이런 경우 사용하는게 Recursive Function(재귀 함수)인데요. 코드는 아래와 같습니다.

            internal static TreeNode[] GetNodeList(TreeNodeCollection treeNodes, bool childAll)
            {
                List<TreeNode> nodes = new List<TreeNode>();
    
                foreach (TreeNode node in treeNodes)
                {
                    nodes.Add(node);
    
                    if (childAll)
                    {
                        if (node.Nodes.Count > 0)
                        {
                            GetNodeList(nodes, node);
                        }
                    }
                }
    
                return nodes.ToArray();
            }
    
            internal static TreeNode[] GetNodeList(List<TreeNode> treeNodes, bool childAll)
            {
                List<TreeNode> nodes = new List<TreeNode>();
    
                foreach (TreeNode node in treeNodes)
                {
                    nodes.Add(node);
    
                    if (childAll)
                    {
                        if (node.Nodes.Count > 0)
                        {
                            GetNodeList(nodes, node);
                        }
                    }
                }
    
                return nodes.ToArray();
            }

     

    위 코드는 GetNodeList를 다시 호출하여 하위 노드들도 가져올 수 있도록 해줍니다.

            private static void GetNodeList(List<TreeNode> nodes, TreeNode node)
            {
                foreach (TreeNode n in node.Nodes)
                {
                    nodes.Add(n);
                    if (n.Nodes.Count > 0)
                        GetNodeList(nodes, n);
                }
            }

     

    코드를 좀 더 간소화하면 아래와 같이 처리할 수 있습니다.

            internal static TreeNode[] GetNodeList(TreeNode node, bool childAll)
            {
                List<TreeNode> nodes = GetNodeList(node.Nodes.Cast<TreeNode>().ToList(), childAll).ToList();
                nodes.Insert(0, node);
                return nodes.ToArray();
            }

     

    개발자에게 후원하기

    MGtdv7r.png

     

    추천, 구독, 홍보 꼭~ 부탁드립니다.

    여러분의 후원이 빠른 귀농을 가능하게 해줍니다~ 답답한 도시를 벗어나 귀농하고 싶은 개발자~

    감사합니다~

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    댓글목록

    등록된 댓글이 없습니다.