【发布时间】:2019-03-22 02:32:40
【问题描述】:
我在Form 上有一个Map 控件。地图控件包含一组图层,每个图层都有一个“IsVisible”来隐藏或显示图层。
我有一个带有CheckBoxes 的TreeView 控件,每个node 代表一个层,全部包含在一个父级node 下。
当我选中/取消选中节点时,我希望相关层的IsVisible 属性设置为等于节点的选中状态。
这是我目前正在做的事情:
private void LayerTreeView_AfterCheck(object sender, TreeViewEventArgs e)
{
if (e.Node.Parent == null) //if it's a parent node, make any children nodes match its checked state
{
foreach (TreeNode node in e.Node.Nodes)
{
node.Checked = e.Node.Checked;
Map.BeginInvoke((MethodInvoker)delegate () { Map.FindFeatureLayer(node.Name).IsVisible = node.Checked; });
}
}
else //it's a child node
{
Map.FindFeatureLayer(e.Node.Name).IsVisible = e.Node.Checked;
}
Map.BeginInvoke((MethodInvoker)delegate () { Map.Refresh(); }); //culprit is here
}
问题在于,随着我拥有的层/节点越多,明显的延迟就会增加。在上面的代码中,最后一行包含Map.Refresh();
在调用 Map.Refresh() 之前,节点不会明显更新,对于每个已更改其检查状态的节点都会调用该函数。这会导致延迟。我需要节点立即更新。 Map 控件是否在刷新时滞后并不重要,但不应该相反。
【问题讨论】:
标签: c# winforms checkbox treeview