C# 在C中FullRowSelect为真时,如何更改TreeView中选定节点的背景色#

C# 在C中FullRowSelect为真时,如何更改TreeView中选定节点的背景色#,c#,treeview,C#,Treeview,标题大致概括了这一点:我正在寻找一种在启用FullRowSelect属性时更改高亮显示节点颜色的方法。我尝试了以下代码: using System; using System.Drawing; using System.Windows.Forms; class ExtendedTreeView : TreeView { public ExtendedTreeView() { this.DrawMode = TreeViewDrawMode.OwnerDrawText; } protec

标题大致概括了这一点:我正在寻找一种在启用FullRowSelect属性时更改高亮显示节点颜色的方法。我尝试了以下代码:

using System;
using System.Drawing;
using System.Windows.Forms;

class ExtendedTreeView : TreeView
{
public ExtendedTreeView()
{
    this.DrawMode = TreeViewDrawMode.OwnerDrawText;
}
protected override void OnDrawNode(DrawTreeNodeEventArgs e)
{
    TreeNodeStates state = e.State;
    Font font = e.Node.NodeFont ?? e.Node.TreeView.Font;
    Color fore = e.Node.ForeColor;
    if (fore == Color.Empty) fore = e.Node.TreeView.ForeColor;
    if (e.Node == e.Node.TreeView.SelectedNode)
    {
        fore = SystemColors.HighlightText;
        e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(254, 128, 62)), e.Bounds);
        ControlPaint.DrawFocusRectangle(e.Graphics, e.Bounds, fore, Color.FromArgb(254, 128, 62));
        TextRenderer.DrawText(e.Graphics, e.Node.Text, font, e.Bounds, fore, TextFormatFlags.GlyphOverhangPadding);
    }
    else
    {
        e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(64,64,64)), e.Bounds);
        TextRenderer.DrawText(e.Graphics, e.Node.Text, font, e.Bounds, fore, TextFormatFlags.GlyphOverhangPadding);
    }
}
}
不幸的是,这只会在FullRowSelect属性关闭时更改选择的背景颜色。因此,只要项目的文本是蓝色的,我就用我自己的颜色突出显示项目,但行的其余部分仍然是蓝色,并且没有更改为我自己的颜色


提前感谢您的帮助

看起来您只是抓住节点边界并绘制其背景。您需要找到一种方法来获取整个行边界并绘制它,而不仅仅是节点边界。我一直在寻找一个解决方案来帮助你解决这个问题,但我什么也没找到。此外,查看是否选中的最佳选项是选中e.Node.IsSelected。这将使检查更有效。祝你好运,但我发现的一切都表明这是不可能的。不过,我相信如果你搜索得足够多,你一定能找到办法。没有什么是不可能的,只是有时候很难。“OwnerDrawText”的意思是它所说的,你只需要画文本。OwnerDrawAll一点也不好玩。