2017-02-20 1 views
1

WindowsフォームのTreeViewでレベルを追加または削除することが可能かどうか疑問に思っていましたか?TreeNodeへのレベルの追加または削除

例えば

ParentNode 
| Child1 
| | Child1.1 

はAA Node.Levelあります:ボタンをユーザーがクリックすると、それはなりCHILD2するレベルを追加する場合

ParentNode 
| Child1 
| Child2 

: 私のツリービューには、そもそもこのようなものですレベルを取得して設定しない場合にのみ使用できます。

編集:
ノードは自動的に作成され、レベルはExcelセルのスタイルに応じて割り当てられます。問題は、作成されたノードが正しい場所にないということです。これは、Excelファイルがうまく作成されていないためです。直接 2 -
は、私は、ノードの選択にMove LeftMove Rightボタンを作成

1 - ユーザーはExcelのファイルを変更します。だから私はこの問題を解決するには、O 2つのオプションを参照してください。

私は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

それは完全にあなたは何も、ノードを追加しない方法によって異なります。 –

+0

@HansPassantは、ノードを構築する方法のコードを追加したいですか?正直なところ、私はそれがノードを左右に動かすのにどのように影響するかは分かりません。 –

+0

私は問題を起こさない。ツリービューにノードを追加するときは、パラメータとして親ノードを入力する必要があります。この例ではChild1になります。 – GuidoG

答えて

2

私が変更された質問には完全に私の答えを変更しなければなりませんでした。 これは私のテストで仕事をしているようです。選択したノードを、その直上にある新しいレベルに移動します。 それはあなたが忘却にノードを移動していないことを確認するoffcourseより多くの検査を必要とする...

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

関連する問題