【问题标题】:how to replace TreeView's selected node with newly created node如何用新创建的节点替换 TreeView 的选定节点
【发布时间】:2013-02-19 08:34:35
【问题描述】:

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

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

代码:

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

【问题讨论】:

  • 你确定 SelectedNode 不为空?
  • 如果index返回-1,则表明没有选择节点,因此与它相关的任何代码都将不起作用。
  • 它是什么样的应用程序? WPF或Winforms或其他什么?如果是 WPF,您的 SelectedNode 会通知吗?
  • @JordyvanEijk:由于问题在winforms 中被标记,我强烈猜测它不是 WPF TreeView ;)
  • @Aschratt 在它不是 winforms 之前它被重新标记了 :)

标签: c# winforms treeview


【解决方案1】:

解决了,发现问题了。

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

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

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多