기본 속성

treeView.HideSelection = false;



노드 추가

//ImageIndex 부분은 Control 중에서 ImageList를 추가하고 이것을 treeview.ImageList 부분에 연결 한 뒤 사용하면 

//트리노드에 icon을 사용할 수 있다.

TreeNode t = new TreeNode();

t.Name = tag.ID;

t.Text = tag.ID;

t.ImageIndex = 0;

t.SelectedImageIndex = 0;

t.StateImageIndex = 0;

if (treeView.SelectedNode == null)

    treeView.Nodes.Add(t);

else

    treeView.SelectedNode.Nodes.Add(t);

treeView.ExpandAll();


전체 노드 가져오기

https://stackoverflow.com/questions/4702051/get-a-list-of-all-tree-nodes-in-all-levels-in-treeview-controls/24856090

// 트리뷰에서 노드 하나 선택시에 모든 자식 노드를 가져오는 함수

public static List<TreeNode> GetAllNodes(TreeNode node)

{

    List<TreeNode> result = new List<TreeNode>();

    result.Add(node);

    foreach (TreeNode child in node.Nodes)

    {

        result.AddRange(GetAllNodes(child));

    }

    return result;

}

 

// 트리뷰의 전체 노드

public static List<TreeNode> GetAllNodes(TreeView treeView)

{

    List<TreeNode> result = new List<TreeNode>();

    foreach (TreeNode child in treeView.Nodes)

    {

        result.AddRange(GetAllNodes(child));

    }

    return result;

}




노드 순서 변경(up&down)

private void btnNodeUp_Click(object sender, EventArgs e)

{

    TreeNode node = treeView.SelectedNode;

    TreeNode parent = node.Parent;

    TreeView view = node.TreeView;

    if (parent != null)

    {

        int index = parent.Nodes.IndexOf(node);

        if (index > 0)

        {

            parent.Nodes.RemoveAt(index);

            parent.Nodes.Insert(index - 1, node);

        }

    }

    else if (node.TreeView.Nodes.Contains(node)) //root node

    {

        int index = view.Nodes.IndexOf(node);

        if (index > 0)

        {

            view.Nodes.RemoveAt(index);

            view.Nodes.Insert(index - 1, node);

        }

    }

}

 

private void btnNodeDown_Click(object sender, EventArgs e)

{

    TreeNode node = treeView.SelectedNode;

    TreeNode parent = node.Parent;

    TreeView view = node.TreeView;

    if (parent != null)

    {

        int index = parent.Nodes.IndexOf(node);

        if (index < parent.Nodes.Count - 1)

        {

            parent.Nodes.RemoveAt(index);

            parent.Nodes.Insert(index + 1, node);

        }

    }

    else if (view != null && view.Nodes.Contains(node)) //root node

    {

        int index = view.Nodes.IndexOf(node);

        if (index < view.Nodes.Count - 1)

        {

            view.Nodes.RemoveAt(index);

            view.Nodes.Insert(index + 1, node);

        }

    }

}



드래그 앤 드롭 drag & drop 

https://support.microsoft.com/ko-kr/help/307968/how-to-add-treeview-drag-and-drop-functionality-in-a-visual-c-applicat


treeView.AllowDrop = true; 


private void treeView_ItemDrag(object sender, ItemDragEventArgs e)

{

    //트리뷰나 리스트뷰의 경우 itemdrag 라는 함수로 드래그앤드롭을 시작한다

    var item = e.Item as TreeNode;

    if (item.Name != "ROOT")

        DoDragDrop(e.Item, DragDropEffects.Move);

}

 

private void treeView_DragEnter(object sender, DragEventArgs e)

{

    e.Effect = DragDropEffects.Move;

    Console.WriteLine("aa");

}

 

// 트리뷰에서 노드 하나 선택시에 모든 자식 노드를 가져오는 함수

public static List<TreeNode> GetAllNodes(TreeNode node)

{

    List<TreeNode> result = new List<TreeNode>();

    result.Add(node);

    foreach (TreeNode child in node.Nodes)

    {

        result.AddRange(GetAllNodes(child));

    }

    return result;

}

private void treeView_DragDrop(object sender, DragEventArgs e)

{

    TreeNode NewNode;

    if (e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false))

    {

        Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));

        TreeNode DestinationNode = ((TreeView)sender).GetNodeAt(pt);

        NewNode = (TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");

 

        List<TreeNode> childList = GetAllNodes(NewNode);

        TreeNode chk = childList.Find(o => o.Name == DestinationNode.Name);

        if (chk == null)

        {

            DestinationNode.Nodes.Add((TreeNode)NewNode.Clone());

            //Remove Original Node

            NewNode.Remove();

            DestinationNode.ExpandAll();

        }

    }

}





Posted by motolies
,