Treeview 在节点单击事件后突出显示随机节点

问题描述 投票:0回答:1

我有一个有四个层次结构的树视图。当单击某个树节点时,相关数据将加载到列表视图中。 单击某些树节点后,在执行树视图节点单击事件后,我遇到了一些随机节点突出显示而不是单击的树节点的问题。最重要的是,这个问题并不是每次点击都会发生。但这种情况发生的频率很高,大约有 1/5 次。这只是一个突出显示,不会发生节点点击。

以下是出现问题的树节点的特征

  • 层次结构中任何级别的树节点,单击节点时没有数据要填充到列表视图中。
  • 树节点位于层次结构的顶层,没有子节点。

下面是我的树视图节点单击事件。

    private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        var hitTest = e.Node.TreeView.HitTest(e.Location);
        if (hitTest.Location != TreeViewHitTestLocations.PlusMinus)
        {
            treeView1NodeMouseClick(sender, e);
            treeView1.Refresh();
        }
    }

通过调试,发现这种随机选择发生在

treeView1_NodeMouseClick
执行完成之后。尝试检查
treeView1_BeforeSelect
事件,选择发生在节点单击事件执行后。 我已经设置了
this.treeView1.HideSelection = false;
。尝试过
treeview1.Refresh();
。它们都不起作用。

有人知道为什么会发生这种情况以及如何解决它吗?

提前致谢!

c# treeview vsto
1个回答
0
投票

发现问题了。 我在每个

treeView1_NodeMouseClick
事件上运行鼠标单击节点的子节点的树视图节点排序器。但在本例中,那些鼠标单击的节点不包含子节点。该树视图节点排序器是突出显示其他节点的排序器。

添加了仅在选择节点包含子节点时运行节点排序器的逻辑。

    if (selectedNode.Nodes.Count > 0)
    {
        //Sort only the child nodes of the selected parent node ; parent node should passe to the NodeSorter
        selectedNode.TreeView.TreeViewNodeSorter = new NodeSorter(selectedNode);
        selectedNode.TreeView.Sort();
    }

保留此问题而不删除它,因为有人可能会遇到类似的问题,无法通过调试轻松跟踪。

© www.soinside.com 2019 - 2024. All rights reserved.