【问题标题】:SelectedNode is not working after refresh always showing null刷新后 SelectedNode 不工作总是显示 null
【发布时间】:2018-11-14 20:17:09
【问题描述】:

在这里,我试图在重新加载树视图后显示最后一个选定的节点,但选定的节点始终为空。我能够从树视图节点集合中找到树节点,但无法将其分配给树视图。请建议:

 public void LoadTreeViewData()
        {
            treeView.Nodes.Clear();// Clear any existing items
            treeView.BeginUpdate(); // prevent overhead and flicker
            LoadBaseNodes();//Populate all nodes

            treeView.EndUpdate();
            treeView.Refresh();
            treeView.ExpandAll();
            if (!string.IsNullOrEmpty(m_oSelectedNode_NAME))
            {
                TreeNode[] treeNodes = treeView.FlattenTree()
                .Cast<TreeNode>()
                .Where(r => Convert.ToDecimal(r.Tag) == Convert.ToDecimal(m_oSelectedNode_NAME))
                .ToArray();

                    treeView.SelectedNode = treeNodes[0];                   
                    treeView.Focus();


            }

        }

【问题讨论】:

  • 如果您能提供minimal reproducible example,那就太好了。
  • WinForms? ASP?我可以弄清楚 FlattenTree 在做什么,但它不是 WinForm 的 TreeView 控件中的标准功能。会不会只是treeView.SelectedNode = tns[0]; 不知道你为什么要做所有其他事情。
  • 这里的扁平化树只不过是返回 IEnumerable 集合来找到我最后一个保存节点。它是一个 winform 控件。
  • 这里的问题是虽然我找到了树节点但是当我分配给 selectedNode 时。 SelectedNode 保持为空。
  • 是的。它是十进制的,它返回给我树节点,但在分配所选节点时为空。

标签: c# winforms treeview


【解决方案1】:

发生此问题是因为我试图在标签编辑事件后更新树视图中的选定节点。我在标签编辑后放置了一个计时器来解决问题并设置它对我有用的选定节点。

  var tnm = new Timer() { Enabled = true, Interval = 30 };
                                tnm.Tick += delegate {
                                    SetSelectioNode();
                                    tnm.Dispose();
                                };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 1970-01-01
    相关资源
    最近更新 更多