@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

TreeViewItem追加について

1
投稿者投稿内容
ゆかり
会議室デビュー日: 2009/04/06
投稿数: 3
投稿日時: 2009-04-06 21:42
初めまして。TreeViewItemの追加方法について質問です。
以下の場所にTreeViewItemを追加しようと思っているのですが、例外が発生し、回避方法が分からず悩んでいます。

『追加前』
TreeViewItem1
TreeViewItem2

『追加場所』
TreeViewItem1
←ここにTreeViewItemを追加
TreeViewItem2

『追加後』
TreeViewItem1
TreeViewItem3
TreeViewItem2

と言うようなTreeViewを作成したいのですが、TreeViewItem3の子にTreeViewItem2を追加するところで悩んでいます。
「古い親を解除してください」というような例外が発生するのですが、その解除方法が分かりません。
どのように回避すれば良いのでしょうか?ご教授をお願いします。

開発言語はVisualStudio 2008 C#です。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-04-06 21:51
> 「古い親を解除してください」というような例外が発生するのですが

何をしたからですか?

要約すると
「リストビューの任意の場所にアイテムを追加しようとしたけどエラーが出ます。
 なぜですか?」
だと思いますが、何をしたかわからないので答えようが無いと思います。

> 「古い親を解除してください」というような例外

正確な例外を教えて下さい。

> 『追加後』
> TreeViewItem1
> TreeViewItem3
> TreeViewItem2
> TreeViewItem3の子にTreeViewItem2

TreeViewItem3 の子に TreeViewItem2 を入れると

TreeViewItem1
TreeViewItem3
- TreeViewItem2

と2階層目に入る事になると思います。
TreeViewItem1 と TreeViewItem2 の間に入れたら良いんじゃないでしょうか。

あれ?
TreeView に追加するのって TreeNode じゃありませんでしたっけ。


[ メッセージ編集済み 編集者: King 編集日時 2009-04-06 22:10 ]
ゆかり
会議室デビュー日: 2009/04/06
投稿数: 3
投稿日時: 2009-04-07 00:01
例外が発生するまでのソースです。


// 初期状態
TreeView treeView = new TreeView();
TreeViewItem item1 = new TreeViewItem();
item1.Header = "TreeViewItem1";
// ツリービューにアイテムを追加
treeView.Items.Add(item1);
TreeViewItem item2 = new TreeViewItem();
item2.Header = "TreeViewItem2";
// item1の配下にitem2を追加
item1.Items.Add(item2);

// この時点でitem1の子にitem2が存在しています。

// item1とitem2の間にitem3を追加したい

// item1の配下にTreeViewItemを追加
TreeViewItem item3 = new TreeViewItem();
item3.Header = "TreeViewItem3";
// item1の配下にitem3を追加
item1.Items.Add(item3);

// item3の配下にitem2を追加
// ここで例外が発生
item3.Items.Add(item2);
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-04-07 00:12
1.もしかして WPF ですか?
2.正確な例外を教えて下さい。
3.
> item1.Items.Add(item2);
> item3.Items.Add(item2);

WPF だとしたら違うかもしれませんが、
Add したらそのアイテムの下層に追加されるのではないのですか?

treeView.Items.Add(item1);
treeView.Items.Add(item3);
treeView.Items.Add(item2);

で良いんじゃないですか


King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2009-04-07 00:20
下記コードで仰る様な動作は出来ましたがどうですか?

コード:
TreeViewItem item1 = new TreeViewItem();
TreeViewItem item2 = new TreeViewItem();
TreeViewItem item3 = new TreeViewItem();

item1.Header = "TreeViewItem1";
item2.Header = "TreeViewItem2";
item3.Header = "TreeViewItem3";

treeView.Items.Add(item1);
treeView.Items.Add(item2);
treeView.Items.Insert(1, item3);

ゆかり
会議室デビュー日: 2009/04/06
投稿数: 3
投稿日時: 2009-04-07 22:43
Kingさん
すいません、書くのを忘れていました。
>1.もしかして WPF ですか?
WPFで作成しています。

>2.正確な例外を教えて下さい。
例外のメッセージですが、「要素には既に論理親があります。新しい親に添付する前に、古い親から解除する必要があります」と発生しました。
1

スキルアップ/キャリアアップ(JOB@IT)