Chủ Nhật, 26 tháng 7, 2015

TreeNode Selected BackColor while TreeView not focused

  1. Set the TreeView.DrawMode to TreeViewDrawMode.OwnerDrawText:
    treeView.DrawMode = TreeViewDrawMode.OwnerDrawText;
  2. Set the Treview.HideSelection to false, so that the node states will be kept as selected:
    treeView.HideSelection= false;
  3. Add DrawNode event handler to draw the background using SystemColors.Highlight color:
    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;
      }
    }

Không có nhận xét nào:

Đăng nhận xét