2013-02-19 74 views
2

我有一个填充的TreeView与我创建的节点,有几个节点类,都从treeNode继承。当我编辑一个节点(使用GUI对话框),它可能会改变为不同的类,所以我在那个过程中创建一个新节点,并试图用我的新节点替换选定的节点,但那不会没有工作,节点保持旧的,无法弄清楚我做错了什么。如何用新创建的节点替换TreeView的选定节点

代码:

TreeNodeMission mission = (TreeNodeMission)treeView.SelectedNode; 
TreeNodeMission newMission = ChangeMissionDialog(mission); 

treeView.SelectedNode = newMission; // doesn't work 

还试图删除和添加它,也不起作用

index = treeView.Nodes.IndexOf(treeView.SelectedNode); // index returns -1 
treeView.Nodes.Remove(treeView.SelectedNode); 
treeView.Nodes.Insert(index, newMission); 

我到底做错了什么?

更新: treeView.SelectedNode不为null,它是我选择的有效节点。

+0

你肯定SelectedNode不是null? – 2013-02-19 08:38:55

+0

如果'index'返回'-1',则表示没有选择节点,因此任何有关它的代码都不起作用。 – 2013-02-19 08:40:39

+0

它是什么样的应用程序? WPF或Winforms或其他? 如果是WPF是您的SelectedNode通知? – 2013-02-19 08:42:12

回答

0

解决了它,发现了错误。

我找到了一种方法来取代节点,通过删除和重新添加它。 我猜我想询问指数会给我总指数在树上,但它给指数只有父母,所以使用父节点,我可以取代它:

int index = treeView.SelectedNode.Index; 
treeView.SelectedNode.Parent.Nodes.RemoveAt(index); 
treeView.SelectedNode.Parent.Nodes.Insert(index, mission); 
treeView.SelectedNode = mission; 

感谢