【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?

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;

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

A 回答 (1件)

 こんばんは。



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

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);
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/08/21 02:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!