我有一个有四个层次结构的树视图。当单击某个树节点时,相关数据将加载到列表视图中。 单击某些树节点后,在执行树视图节点单击事件后,我遇到了一些随机节点突出显示而不是单击的树节点的问题。最重要的是,这个问题并不是每次点击都会发生。但这种情况发生的频率很高,大约有 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();
。它们都不起作用。
有人知道为什么会发生这种情况以及如何解决它吗?
提前致谢!
发现问题了。 我在每个
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();
}
保留此问题而不删除它,因为有人可能会遇到类似的问题,无法通过调试轻松跟踪。