2017-02-20 7 views
1

레벨을 추가하거나 제거하기 위해 Windows Form의 TreeView를 사용할 수 있는지 궁금합니다.TreeNode에 레벨 추가 또는 제거

예를 들어

:

ParentNode 
| Child1 
| | Child1.1 

aa는 Node.Level 있습니다 : 버튼에 사용자가 클릭이되고 자식 2 할 수준을 추가 할 경우

ParentNode 
| Child1 
| Child2 

: 내 트 리뷰로 시작하는이 같다 기능을 사용하지만 레벨을 가져오고 설정하지 않을 수 있습니다.

편집 :
노드가 자동으로 작성되며 레벨은 Excel 셀의 스타일에 따라 지정됩니다. 문제는 엑셀 파일이 잘 작성되지 않았기 때문에 생성 된 노드가 올바른 위치에 있지 않다는 것입니다. 직접 2
내가 노드의 선택에 Move LeftMove Right 버튼을 만들

1 사용자가 엑셀 파일을 수정합니다 그래서이 문제를 해결 O 2 옵션을 참조하십시오.

두 번째 가능성을 제안하고 싶습니다.

여기에 내가 노드를 구축하는 데 사용되는 코드는 다음과 같습니다

public static void AddNodes(Excel.Application app, 
            TreeView treeView) 
    { 
     Excel.Range selection = app.Selection; 

     ArrayList style = new ArrayList(); 

     TreeNode parentNode = treeView.SelectedNode; 

     //Selected Node => Last used node 
     for (int i = 1; i <= selection.Rows.Count; i++) 
     { 
      TreeNode tn; 

      int fontSize = Convert.ToInt32(selection.Cells[i].Font.Size); 

      if (!style.Contains(fontSize)) 
      { 
       style.Add(fontSize); 
      } 

      else if (style[style.Count - 1].Equals(fontSize)) 
      { 
       try 
       { 
        treeView.SelectedNode = treeView.SelectedNode.Parent; 
       } 
       catch (Exception x) 
       { 
        ErrorBox(x); 
       } 
      } 

      else 
      { 
       int indexPreviousCellofSameColor = style.IndexOf(fontSize); 

       //Select TN parent 
       for (int j = 1; j <= (style.Count - indexPreviousCellofSameFont); j++) 
       { treeView.SelectedNode = treeView.SelectedNode.Parent; } 

       style.RemoveRange(indexPreviousCellofSameFont + 1, style.Count - indexPreviousCellofSameFont - 1); 
      } 

      if (selection.Cells[i].Value2 == null) 
      { 
       //if empty cell, do something ... or nothing 
       treeView.SelectedNode = treeView.SelectedNode.LastNode; 
      } 
      else 
      { 
       //Add new TN to parent - TN object corresponds to excel cell 
       tn = new TreeNode() 
       { 
        Text = selection.Cells[i].Value2, 
        Tag = selection.Cells[i], 
       }; 
       treeView.SelectedNode.Nodes.Add(tn); 
       tn.ToolTipText = tn.Level.ToString(); 

       //selected TN => created TN 
       treeView.SelectedNode = tn; 
      } 
     } 
    } 
+0

그것은 전적으로 당신이 다른 것도 노드를 추가되지 방법에 따라 달라집니다 ... 더 검사 offcourse 당신의 움직이지 노드가 망각 있는지 확인해야합니다. –

+0

@HansPassant는 노드를 만드는 방법에 대한 코드를 추가하길 원하십니까? 솔직히, 노드 이동이 왼쪽이나 오른쪽으로 어떻게 영향을 미칠지는 알 수 없습니다. –

+0

문제가 생기지 않습니다. Treeview에 노드를 추가 할 때 부모 노드를 매개 변수로 입력해야합니다. 예를 들어 Child1이됩니다. 그러면 발생한 문제는 무엇입니까? – GuidoG

답변

2

내가 변경된 질문에 완전히 내 대답을 변경했다. 이것은 내 테스트에서 일을하는 것 같습니다. 선택한 노드를 바로 위에있는 노드 아래의 새 노드로 이동합니다. 그것은

private void button1_Click(object sender, EventArgs e) 
{ 
    TreeNode selected = treeViewFilter.SelectedNode; 
    TreeNode parent = selected.Parent; 

    // find the node just above the selected node 
    TreeNode prior = parent.Nodes[selected.Index - 1]; 

    if (parent != prior) 
    { 
     treeViewFilter.Nodes.Remove(selected); 
     prior.Nodes.Add(selected); 
    } 
} 
+0

죄송합니다. 답변을 잘못 "편집"했습니다 ... –

+0

트릭을 수행합니다! 나는 그것을 왼쪽으로 옮길 수 있도록 약간 수정할 것이다. 많은 시간을 가져 주셔서 감사합니다! –

+1

문제 없습니다. 바로이 사이트가 – GuidoG