기본 속성
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();
전체 노드 가져오기
// 트리뷰에서 노드 하나 선택시에 모든 자식 노드를 가져오는 함수
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
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();
}
}
}