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