If retaining the SystemColors.Highlight background color is all you wanted, then you don't need to set the TreeView's DrawMode property to TreeViewDrawMode.OwnerDrawAll. Setting it to TreeViewDrawMode.OwnerDrawText should be sufficient, thus you don't need to worry about drawing the TreeNode's corresponding ImageKey.
Set the
TreeView.DrawModetoTreeViewDrawMode.OwnerDrawText:treeView.DrawMode = TreeViewDrawMode.OwnerDrawText;Set the
Treview.HideSelectiontofalse, so that the node states will be kept as selected:treeView.HideSelection= false;Add
DrawNodeevent handler to draw the background usingSystemColors.Highlightcolor: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; } }