C# WinForm中如何移除TreeView节点默认蓝色背景
C# WinForm TreeView移除节点点击蓝色背景的解决方案
以下是几种可行的解决方法:
方法一:自定义绘制节点(推荐)
通过开启TreeView的自定义绘制模式,手动控制节点的绘制逻辑,完全替换默认的选中蓝色背景。
- 首先设置TreeView的
DrawMode属性为OwnerDrawText:
treeView1.DrawMode = TreeViewDrawMode.OwnerDrawText;
- 绑定
DrawNode事件,在事件中自定义绘制逻辑:
private void TreeView1_DrawNode(object sender, DrawTreeNodeEventArgs e) { // 确定节点背景色:选中时使用TreeView的默认背景色,而非蓝色 Color bgColor = e.Node.IsSelected ? treeView1.BackColor : e.Node.BackColor; using (SolidBrush bgBrush = new SolidBrush(bgColor)) { e.Graphics.FillRectangle(bgBrush, e.Bounds); } // 绘制节点文本,保持原有字体和颜色 Color textColor = e.Node.IsSelected ? treeView1.ForeColor : e.Node.ForeColor; using (SolidBrush textBrush = new SolidBrush(textColor)) { // 偏移2像素避免文本贴边 e.Graphics.DrawString(e.Node.Text, e.Node.NodeFont ?? treeView1.Font, textBrush, e.Bounds.X + 2, e.Bounds.Y); } // 可选:绘制自定义焦点框(如果需要区分选中状态) if ((e.State & TreeNodeStates.Selected) != 0) { ControlPaint.DrawFocusRectangle(e.Graphics, e.Bounds, textColor, bgColor); } }
方法二:通过API禁用选中高亮
利用Windows API修改TreeView的扩展样式,移除选中时的蓝色背景效果。
- 先定义所需的API常量和方法:
private const int TVM_SETEXTENDEDSTYLE = 0x1100 + 44; private const int TVS_EX_SELECTIONRECTANGLE = 0x0010; [DllImport("user32.dll", CharSet = CharSet.Auto)] private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp);
- 在TreeView加载完成后调用API修改样式:
private void TreeView1_Load(object sender, EventArgs e) { // 移除选中矩形样式 SendMessage(treeView1.Handle, TVM_SETEXTENDEDSTYLE, IntPtr.Zero, (IntPtr)(~TVS_EX_SELECTIONRECTANGLE)); }
方法三:动态修改节点颜色
当节点选中时,强制设置节点的背景色为TreeView的背景色,覆盖默认蓝色。
- 绑定TreeView的
AfterSelect事件:
private TreeNode prevSelectedNode; private void TreeView1_AfterSelect(object sender, TreeViewEventArgs e) { // 恢复上一个选中节点的默认颜色 if (prevSelectedNode != null) { prevSelectedNode.BackColor = treeView1.BackColor; prevSelectedNode.ForeColor = treeView1.ForeColor; } // 设置当前选中节点的颜色,覆盖蓝色背景 e.Node.BackColor = treeView1.BackColor; e.Node.ForeColor = treeView1.ForeColor; prevSelectedNode = e.Node; }
注意:此方法在TreeView失去焦点时可能出现样式回退,需额外绑定LostFocus事件处理节点颜色恢复。
内容的提问来源于stack exchange,提问作者Meliodas
相关产品推荐
相关产品推荐

