丢失焦点时重置自定义Node.ForeColor

时间:2016-08-14 04:26:20

标签: c# .net colors treeview multi-select

我正在使用此TreeViewMS实现,以便用户可以拥有多选功能,但我发现今天某些功能无法正常运行。如果我将TreeNode.ForeColor属性设置为Color.Red,并将焦点放在该节点上,则当我将鼠标移出该节点时,其颜色会立即恢复为默认颜色(黑色)。我该如何解决这个问题? 我一直在寻找一个事件来尽快将TreeNode.ForeColor设置为我的自定义事件,因为如果该节点符合改变其颜色的需要,节点将失去焦点。有这样的事件吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

要解决此问题,您可以通过以下方式自行绘制节点文本:

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