自定义节点.当失去焦点时,颜色会被重置
本文关键字:颜色 节点 失去 焦点 自定义 | 更新日期: 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);
}