选择后TreeNodes的ForeColor更改

时间:2019-07-31 06:42:20

标签: c# forms treeview

我有一个树状视图,其中有彩色的节点取决于它们的状态(保存的节点为绿色,禁用的节点为灰色,其余为默认值)。但是,只要选择节点,它们的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,但这似乎效率不高,因为用户可能会创建数百个节点。

0 个答案:

没有答案