C# 失去焦点时,将重置Custom Node.ForeColor

C# 失去焦点时,将重置Custom Node.ForeColor,c#,.net,colors,treeview,multi-select,C#,.net,Colors,Treeview,Multi Select,我正在使用这个实现,这样用户就可以拥有多重选择功能,但我发现今天有些东西不能正常工作。如果我将属性设置为:Color.Red,并将焦点放在该节点上,则当我将鼠标从该节点中取出时,其颜色会立即恢复为默认颜色(黑色)。我如何解决这个问题? 我一直在寻找一个事件,一旦节点失去焦点,如果该节点符合更改其颜色的需要,就立即将设置为我的自定义节点。有这样的事件吗?问题在TreeViewMS类中。查看removePaintFromNodes方法: protected void removePaintFromN

我正在使用这个实现,这样用户就可以拥有多重选择功能,但我发现今天有些东西不能正常工作。如果我将属性设置为:
Color.Red
,并将焦点放在该节点上,则当我将鼠标从该节点中取出时,其颜色会立即恢复为默认颜色(黑色)。我如何解决这个问题?
我一直在寻找一个事件,一旦节点失去焦点,如果该节点符合更改其颜色的需要,就立即将设置为我的自定义节点。有这样的事件吗?

问题在
TreeViewMS
类中。查看
removePaintFromNodes
方法:

protected void removePaintFromNodes()
{
    if (m_coll.Count==0) return;

    TreeNode n0 = (TreeNode) m_coll[0];
    Color back = n0.TreeView.BackColor;
    Color fore = n0.TreeView.ForeColor;

    foreach ( TreeNode n in m_coll )
    {
        n.BackColor = back;
        n.ForeColor = fore;
    }
}
此方法将背景色和前景色重置为treeview默认值

如果删除此方法,则当您单击另一个节点时,它将保留该节点的前景色,但当选定该节点时,它将使用选定节点的默认前景色

要解决此问题,您可以通过以下操作自己绘制节点文本:

treeViewMS1.DrawMode = TreeViewDrawMode.OwnerDrawText;
treeViewMS1.DrawNode += TreeViewMS1_DrawNode;
这是:

private void TreeViewMS1_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
    TextRenderer.DrawText(e.Graphics, e.Node.Text, e.Node.NodeFont, e.Bounds, e.Node.ForeColor, TextFormatFlags.GlyphOverhangPadding);
}

HideSelection是真的吗?