我有一个树状视图,其中有彩色的节点取决于它们的状态(保存的节点为绿色,禁用的节点为灰色,其余为默认值)。但是,只要选择节点,它们的ForeColor就会重置为默认值
使用简单的树加载树时,节点将着色
node.ForeColor = Color.Gray;
。
我已经尝试过使用AfterSelect事件为节点重新着色(有点简化代码):
void wgtree_BeforeSelect(object sender, EventArgs e)
{
previousNode = wgtree.SelectedNode;
}
void wgtree_AfterSelect(object sender, TreeViewEventArgs e)
{
KeyValuePair<int, IBC> bc = (KeyValuePair<int, IBC>)tvBCTemplates.SelectedNode.Tag;
string nodeID = previousNode.Name;
if (Int32.TryParse(nodeID, out int wgid))
{
int bcid = GetBCID(wgid);
if (bcid == 0)
{
previousNode.ForeColor = Color.Black;
}
else if (bcid == bc.Key)
{
previousNode.ForeColor = Color.DarkGreen;
}
else
{
previousNode.ForeColor = Color.Gray;
}
}
}
但是,AfterSelect似乎仍然太“早”,无法为上一个节点着色。
我想我可以遍历整个TreeView,但这似乎效率不高,因为用户可能会创建数百个节点。