こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

TreeViewのノードの編集結果が反映されない

C#3.5を使用しています。

treeView1にはnameが「ノード1」のノードがセットされていて、
それを次のようにして

TreeNode newNode;
newNode = new TreeNode(treeView1.SelectedNode.Name);
newNode.Text = "ノードテキスト変更";
treeView1.SelectedNode = newNode;
MessageBox.Show(treeView1.SelectedNode.Text);// ノード1のまま・・・

ノードを編集したと思ったのですがノードのテキストは変更されませんでした。
間に直接

treeView1.SelectedNode.Text = newNode.Text;

を入れるとテキストは変更されるのですが、ノードそのものを入れ替える(編集する)には
どのように記述すれば良いのでしょうか?

投稿日時 - 2009-08-19 22:42:45

QNo.5220896

すぐに回答ほしいです

質問者が選んだベストアンサー

 こんばんは。

 新規ノードを追加した後、選択ノードを引っこ抜かないといけないのではないでしょうか。
 新規ノードを追加する際、ツリーの形状を辿って適切な位置に入れないといけないので、再帰を使って話を進めた方が楽かもしれません。
 速度面等、色々とアラはあると思いますが、以下参考程度に。

private bool SwapTreeNode(TreeNodeCollection tvnc, TreeNode selectedNode, TreeNode newNode)
{
for (int n = 0; n < tvnc.Count; ++n)
{
//選択ノードを発見
if (tvnc[n] == selectedNode)
{
//新規ノードを追加
tvnc.Insert(n, newNode);
return true;
}

//+1階層下へ再帰する
if (SwapTreeNode(tvnc[n].Nodes, selectedNode, newNode))
return true;
}
return false;
}

private void ???()
{
//新規ノード作成
TreeNode newNode = new TreeNode(treeView1.SelectedNode.Name);
newNode.Text = "ノードテキスト変更";

//ツリー形状を辿って選択ノードの位置を見つけて新規ノードを追加
SwapTreeNode(treeView.Nodes, treeView.SelectedNode, newNode);

//選択ノードを引っこ抜く
treeView.SelectedNode.Remove();

//新規ノードを選択する
treeView.SelectedNode = newNode;

//確認
MessageBox.Show(treeView1.SelectedNode.Text);
}

投稿日時 - 2009-08-20 21:57:51

お礼

ご返答ありがとうございます。
なるほど、選択してる場所を探して入れ替えるわけですか。
そのやり方できました。ありがとうございます。

投稿日時 - 2009-08-21 02:10:12

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問