2011-12-09 6 views
2

Fristは次のコードと画像を参照してください。
なぜTreeViewコントロールは空のノードを作成しますか?

コードA

treeView1.Nodes.Add("Node A"); 
treeView1.Nodes.Add("Node B"); 

出力:
enter image description here


コードB

 TreeNode tn = new TreeNode(); 
     tn.Nodes.Add("Node A"); 
     tn.Nodes.Add("Node B"); 
     treeView1.Nodes.Add(tn); 

enter image description here


今私の問題はtreeView1.Nodes.Add(tn);空白ノードを作成していますが、私の要件はCode A's(空白ノードなし)のようなものです。他の情報が必要な場合は、私に知らせてください。
UPDATE
は実際IthereはTreeNodeを返し、Iは最初のブランクレベルなしTreeView制御にこのノードを追加する必要が自分のコード内の関数です。

+1

:質問が

を更新しましたので、ちょうど関数によって返さノードのためのTextプロパティを設定しますあなたがツリーノードを返す関数を持っていて、それをthに追加したいのであればあなたのTreeViewのルートは、単にtreeView1.Nodes.Add(yourReturnedTreeNode)と書いてください。 –

+1

@ムージェ:それはかなり正しいとは思わない。私は、返されたノード自体を追加せずに、返されたノードの子を追加したいと考えています。もしそうなら、私の変更された答えは助けになるでしょう。 –

+0

彼は実際にやりたいことについて野生の推測しかできません。「私のコードにTreeNodeを返す関数があり、このノードを額面にTreeViewコントロールに追加する必要があります。 –

答えて

5

このコード:

TreeNode tn = new TreeNode(); 

実際のアイテムを作成します。あなたは何もテキストを与えていないので、それは空白に見えます。次に、次の2行が空ノードに子ノードを追加しています。

あなたの目標が「A」のコードの場合は、なぜ「B」と書いていますか?

編集:あなたの更新質問

への応答は、あなたが望む子供が含まれているルート空白のツリーノードを、返す関数を持っています。だから、このようなものが順番にある。

foreach (var node in returnedNode.Nodes) 
{ 
    treeView1.Nodes.Add(node); 
} 

OR

treeView1.Nodes.AddRange(returnedNode.Nodes.Cast<TreeNode>().ToArray()); 
+0

'TreeView'のレベル0を削除して、関数treenodeがレベル0に現れるようにすることはできますか? – jams

+0

@Jams:私の質問を理解できないか、すでにコードの編集セクションで起こっています。 (返されたノードのノードを追加する前にtreeView1が空であることを確認してください) –

+0

あなたはよく質問をよく理解していますが、編集の回答はうまくいきますが、他の問題も見つけようとしています。 – jams

2
TreeNode t1 = new TreeNode("Node A");   
treeView1.Nodes.Add(t1); 
TreeNode t2 = new TreeNode("Node B");   
treeView1.Nodes.Add(t2); 

あなたはありません、それは第二のスニペットのように子供の下、直接treeView1の下でノードを追加する必要があります。

+0

'TreeNode tn = new TreeNode()'デフォルトコンストラクタを使って同じ機能を実現できますか? – jams

+0

はい、できます。 TreeNode t1 =新しいTreeNode(); t1.Text = "ノードA"; treeView1.Nodes.Add(t1); –

2

default constructor of the TreeNode classを使用したため、ルートノードの名前は空です。

TreeNode(string text) constructor

// specify name of the root node 
    TreeNode tn = new TreeNode("Root Node Name"); 
    tn.Nodes.Add("Node A"); 
    tn.Nodes.Add("Node B"); 
    treeView1.Nodes.Add(tn); 

UPDATEを使用してtnノードの名前を指定して試してみてください:

TreeNode treeNode = YourMethodWhichCreatesTreeNode(); 
treeNode.Text = "Root Node Name"; 
treeView.Nodes.Add(treeNode); 
+0

更新に関する質問をご覧ください。 – jams

+0

@jams:更新された回答を表示 – sll

関連する問題