📜  c# treeview 保持选中节点高亮 - C# (1)

📅  最后修改于: 2023-12-03 15:13:49.762000             🧑  作者: Mango

C# Treeview 保持选中节点高亮

在C#中,TreeView是一个非常流行的控件,它允许用户以树形结构查看和操作数据。当用户选择某个节点时,我们通常想要高亮显示该节点,以提醒用户当前所选项。不幸的是,在C#的TreeView中,如果用户单击该节点之外的任何地方,则会取消选择。本文将介绍如何在C#的TreeView控件中保持选中节点高亮。

设置TreeView的DrawMode

在TreeView控件的属性中找到DrawMode属性,并将其设置为OwnerDrawAll。这将使TreeView控件在默认情况下不绘制任何项。

treeView1.DrawMode = TreeViewDrawMode.OwnerDrawAll;
绘制节点并设置高亮

现在,我们需要为TreeView中的每个节点绘制它们的文本和图标。为此,我们需要订阅TreeView的DrawNode事件。

在我们的事件处理程序内,我们首先需要绘制节点的文本并计算出绘制的矩形。然后,我们可以根据节点是否被选中来绘制一个高亮的矩形。

private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
    // 绘制节点标题
    e.DrawDefault = true;

    // 高亮节点
    if ((e.State & TreeNodeStates.Selected) != 0)
    {
        // 绘制高亮矩形
        int height = e.Bounds.Height + 1;
        Rectangle rect = new Rectangle(
            e.Bounds.X - 3, e.Bounds.Y - 1,
            treeView1.ClientRectangle.Width,
            height);
        e.Graphics.FillRectangle(
            SystemBrushes.Highlight, rect);
    }
}

在上面的代码中,我们首先调用e.DrawDefault = true以绘制默认的节点文本和图标。然后,我们检查节点是否处于选中状态,如果是,则计算出要绘制的矩形,并使用高亮颜色填充它。

设置选中节点的颜色

最后,我们需要设置选中节点的颜色。为此,我们需要设置TreeView的ForeColor和BackColor属性。

treeView1.ForeColor = SystemColors.ControlText;
treeView1.BackColor = SystemColors.Control;

通过设置这些属性,我们可以使用系统默认高亮颜色突出显示选中节点。

完整代码
public Form1()
{
    InitializeComponent();

    // 设置DrawMode
    treeView1.DrawMode = TreeViewDrawMode.OwnerDrawAll;

    // 订阅DrawNode事件
    treeView1.DrawNode += treeView1_DrawNode;

    // 设置选中节点颜色
    treeView1.ForeColor = SystemColors.ControlText;
    treeView1.BackColor = SystemColors.Control;
}

private void treeView1_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
    // 绘制节点标题
    e.DrawDefault = true;

    // 高亮节点
    if ((e.State & TreeNodeStates.Selected) != 0)
    {
        // 绘制高亮矩形
        int height = e.Bounds.Height + 1;
        Rectangle rect = new Rectangle(
            e.Bounds.X - 3, e.Bounds.Y - 1,
            treeView1.ClientRectangle.Width,
            height);
        e.Graphics.FillRectangle(
            SystemBrushes.Highlight, rect);
    }
}

以上是如何在C#的TreeView控件中保持选中节点高亮。希望能对你有所帮助!