自定义节点.当失去焦点时,颜色会被重置

本文关键字:颜色 节点 失去 焦点 自定义 | 更新日期: 2023-09-27 18:02:15

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

自定义节点.当失去焦点时,颜色会被重置

问题是在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;
    }
}

此方法将背景色和前色重置为树视图的默认值。

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

要解决这个问题,您可以自己绘制节点文本,这样做:

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);
}