gpt4 book ai didi

c# - TreeNode 在 TreeView 未聚焦时选择了 BackColor

转载 作者:IT王子 更新时间:2023-10-29 04:30:30 25 4
gpt4 key购买 nike

有没有一种简单的方法可以让选定的 TreeNode 保留其 SystemColors.Highlight BackColor 而 TreeView 没有焦点?因为即使将 HideSelection 设置为 false,所选的 BackColor 也几乎看不到。

在 TreeView 获得焦点时选择了 TreeNode:

Focused

选中 TreeNode 而 TreeView 没有焦点:

Unfocused

提前致谢。

编辑: 我知道我可以将 DrawMode 设置为 OwnerDrawAll,然后添加自定义 DrawNode 事件。我之前确实尝试过这个,我遇到的问题是我不知道如何正确绘制 TreeNode 的相应 ImageKey。

最佳答案

如果只保留 SystemColors.Highlight 背景色,则不需要设置 TreeViewDrawMode属性到 TreeViewDrawMode.OwnerDrawAll。将其设置为 TreeViewDrawMode.OwnerDrawText 应该就足够了,因此您无需担心绘制 TreeNode 对应的 ImageKey

  1. TreeView.DrawMode 设置为 TreeViewDrawMode.OwnerDrawText:

    treeView.DrawMode = TreeViewDrawMode.OwnerDrawText;
  2. Treview.HideSelection设置为false,这样节点状态将保持选中状态:

    treeView.HideSelection= false;
  3. 添加 DrawNode 事件处理程序以使用 SystemColors.Highlight 颜色绘制背景:

    private void treeView_DrawNode(object sender, DrawTreeNodeEventArgs e)
    {
    if (e.Node == null) return;

    // if treeview's HideSelection property is "True",
    // this will always returns "False" on unfocused treeview
    var selected = (e.State & TreeNodeStates.Selected) == TreeNodeStates.Selected;
    var unfocused = !e.Node.TreeView.Focused;

    // we need to do owner drawing only on a selected node
    // and when the treeview is unfocused, else let the OS do it for us
    if (selected && unfocused)
    {
    var font = e.Node.NodeFont ?? e.Node.TreeView.Font;
    e.Graphics.FillRectangle(SystemBrushes.Highlight, e.Bounds);
    TextRenderer.DrawText(e.Graphics, e.Node.Text, font, e.Bounds, SystemColors.HighlightText, TextFormatFlags.GlyphOverhangPadding);
    }
    else
    {
    e.DrawDefault = true;
    }
    }

关于c# - TreeNode 在 TreeView 未聚焦时选择了 BackColor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21198668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com