首页 > 解决方案 > 选择后 TreeNodes 的前景色发生变化

问题描述

我有一个带有彩色节点的树视图,具体取决于它们的状态(保存的是绿色,禁用的是灰色,其余是默认值)。但是,只要选择了一个节点,它们的前景色就会重置为默认值

当使用简单的 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,但这似乎不是很有效,因为用户可能会创建数百个节点。

标签: c#formstreeview

解决方案


推荐阅读