【问题标题】:Set treeview.SelectedNode by index (List<Int>)按索引设置 treeview.SelectedNode (List<Int>)
【发布时间】:2019-02-25 20:09:18
【问题描述】:

我想通过迭代一个 int List 来设置 TreeView.selected 节点,但我不知道如何设置 childNodes。我的自定义控件中有以下代码:

 private void SetSelectedNode()
    {
        if (MySelectedNodeIndexes == null) return;

        for (int i = 0; i < MySelectedNodeIndexes.Count; i++)
        {
            this.SelectedNode = this.Nodes[MySelectedNodeIndexes[i]];

        }            
    }

这仅在第一次迭代时设置节点。但是第二次迭代应该设置 this.SelectedNode.Nodes[MyselctedNodesIndexes 中的第一个条目].SelectedNode。等等。

如果 MySelectedNodeIndexes 包含 {2,4,7,1} 我希望选定的节点是: this.Nodes[2].nodes[4].nodes[7].nodes[1];

我不知道该怎么做?提前感谢您的帮助。

【问题讨论】:

  • 很难理解您的问题,因为整数列表与 TreeNode 集合不对应。 TreeView 中的每个节点都有自己的 Nodes 集合,依此类推。这不是一个线性列表。
  • 如果 MySelectedNodeIndexes 包含 {2,4,7,1} 我希望选定的节点是:this.Nodes[2].nodes[4].nodes[7].nodes[1];
  • @Jan-WIllem 好的,现在更清楚了。把它放在问题中。您的列表实际上代表了每个节点级别的索引,以便到达您想要的节点。

标签: c# winforms treeview


【解决方案1】:

您可以使用 for 循环根据输入索引列表查找节点。例如:

TreeNode GetNodeByIndexPath(TreeView treeView, int[] indexPath)
{
    var nodes = treeView.Nodes;
    TreeNode node = null;
    for (int i = 0; i < indexPath.Length; i++)
    {
        node = nodes[indexPath[i]];
        nodes = node.Nodes;
    }
    return node;
}

示例

var path = new int[] { 1, 1, 1 };
treeView1.SelectedNode = GetNodeByIndexPath(treeView1, path);

【讨论】:

  • 非常感谢。我总是对正确答案的简单性感到惊讶。可惜我自己也弄不明白。
  • 不错,不用担心,熟能生巧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-28
  • 2020-04-15
  • 1970-01-01
  • 2021-03-08
  • 2019-12-22
  • 1970-01-01
相关资源
最近更新 更多