c# - 如何用新创建的节点替换 TreeView 的选定节点

标签 c# winforms treeview

我有一个填充了我创建的节点的 treeView,有几个节点类,都继承自 treeNode。

当我编辑一个节点(使用 GUI 对话框)时,它可能会更改为不同的类,因此我在该过程中创建了一个新节点,并尝试用我的新节点替换所选节点,但事实并非如此不工作,节点保持旧节点,无法弄清楚我做错了什么。

代码:

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 不为空,它是我选择的有效节点。

最佳答案

解决了,找到了bug。

我找到了一种替换节点的方法,方法是删除并重新添加它。 我想我认为请求索引会给我树中的一般索引,但它只给父节点索引,所以使用父节点,我可以替换它:

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

谢谢

关于c# - 如何用新创建的节点替换 TreeView 的选定节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14953041/

相关文章:

c# - 从 Web 服务反序列化 PHP 数据

c# - 闪烁的 ToolStripButton

c# - asp.net treeview 复选框选择

css - 为每个节点设计 asp.net TreeView

c# - 按搜索字符串字母顺序 LINQ 开头的名称排序

c# - 无限循环 PrintDocument HasmorePages c#

c# - 如何使用 Entity Framework Code First 映射非公共(public) Collection 属性?

c# - Ghostscript.NET.dll 打印 pdf 到指定打印机

c# - DataGridView 复选框选择

Silverlight:在分层数据模板中定义事件处理程序