2017-01-25 3 views
0

これは動作しませんが、誰にでも私に説明することができます。問題のことをやり遂げるのを妨げる仕組みは何ですか?TreeNode []を2つのツリービューに割り当てることができない理由

ので

TreeNode[] itemNodes = new TreeNode[2]; 
itemNodes[0] = new TreeNode("item1"); 
itemNodes[1] = new TreeNode("item2"); 

TreeNode[] botNodesFirst = new TreeNode[2]; 
botNodesFirst[0] = new TreeNode("bot1"); 
botNodesFirst[1] = new TreeNode("bot2"); 

TreeNode[] botNodesSecond = new TreeNode[3]; 
botNodesSecond[0] = new TreeNode("bot1"); 
botNodesSecond[1] = new TreeNode("bot2", itemNodes); 
botNodesSecond[2] = new TreeNode("bot3"); 

TreeNode[] topNodes = new TreeNode[2]; 
topNodes[0] = new TreeNode("top", botNodesFirst); 
topNodes[1] = new TreeNode("top2", botNodesSecond); 

そしてこれは

foreach(TreeNode node in topNodes) 
{ 
    trvTest.Nodes.Add(node); 
} 

に動作します。しかし、これは感謝

foreach(TreeNode node in topNodes) 
{ 
    trvTest.Nodes.Add(node); 
    trvTestSecond.Nodes.Add(node); 
} 

ません。

+0

コードには、 'trvTest'またはtrvTestSecond'の宣言は表示されません。また、それがうまくいかないということはどういう意味ですか?エラーが発生した場合、エラーが発生しましたか? – Ben

+0

trvは私がフォームにドロップしたばかりのツリービューです。私が意味するのは、各ノードを各ツリービューに追加するのではなく、両方のツリービューにランダム(見た目にはノード)を追加するということです。 – Janushoff

答えて

3

同じTreeNodeのは、オブジェクトへの参照を代入していることを覚えて、同時に2つのツリービューに割り当てることはできません。あなたの場合、ノードはどのコントロールがその親であるかを定義することはできません。

しかし、1つの奇妙なものと1つは明白ではありません。 明白ではありませんが、新しいTreeViewにノードを割り当てることは、書き換えられ、最初のTreeから消えて2番目に表示される間は禁止されます。しかし、これは設計によるものであり、私たちはそれを生かなければならない、それはそれほど悪くない。

奇妙なことは、私のサンプルプロジェクトが正常に実行され、第二のツリーに最初の木とITEM1とITEM2でトップとTOP2のノードを表示していることです。 TreeNodeCollectionをデバッグして、デバッグを続けると、ノードを複数のツリーに割り当てることができず、それらを複製したり削除したりする必要があるため、ビューの作成中にツリーへの割り当てが解決されないようです最初の木。これはバグやレースのようなものです。

+0

ノードがコンストラクタで割り当てられている場合にのみ、競合が発生します。私の悪い。 :) –

+0

はい、それは私が動作しないことによって意味されたものです - 第1ツリー上のいくつかのアイテムを落とす、第2ツリー上のいくつかのアイテムを落とす代わりに、両方のツリーにすべてのノードを追加する。答えをありがとう。 – Janushoff

関連する問題