TreeView字体颜色设置
修改要点WinForms TreeView 想要不同节点不同字体大小、文字颜色必须开启OwnerDraw然后处理DrawNode事件。只需要在PipeCheckUserControl构造函数里加2行新增_treeQC_DrawNode方法不用改 LoadCheckTree 其它逻辑。1. 在构造函数中给_treeQC增加设置和事件绑定找到你代码里初始化_treeQC的地方增加这两行_treeQC.DrawModeTreeViewDrawMode.OwnerDrawText;// 自绘文字复选框、加减号由系统画最简单_treeQC.DrawNode_treeQC_DrawNode;放在_treeQC.AfterCheck TreeQC_AfterCheck;后面就行。2. 在 PipeCheckUserControl 类里面新增这个DrawNode方法privatevoid_treeQC_DrawNode(objectsender,DrawTreeNodeEventArgse){FontnodeFont;ColorforeColor;if(e.Node.TagisstringtagtagGROUP){// 分组节点字号更大 蓝色 nodeFontnewFont(e.Node.TreeView.Font.FontFamily,10,FontStyle.Bold);foreColorColor.DarkBlue;}else{// 子检查项默认字体、黑色 nodeFonte.Node.TreeView.Font;foreColorColor.Black;}// 绘制文字e.Graphics.DrawString(e.Node.Text,nodeFont,Brushes.GetBrush(foreColor),e.Bounds.X,e.Bounds.Y);// 释放自定义Font避免GDI资源泄漏if(nodeFont!e.Node.TreeView.Font)nodeFont.Dispose();}完整改动位置对照你原有代码//TreeView_treeQCnewTreeView();_treeQC.DockDockStyle.Fill;_treeQC.CheckBoxestrue;_treeQC.ShowLinestrue;_treeQC.ShowPlusMinustrue;// 新增下面两行 _treeQC.DrawModeTreeViewDrawMode.OwnerDrawText;_treeQC.DrawNode_treeQC_DrawNode;////右键菜单_treeContextMenunewContextMenuStrip();…… _treeQC.NodeMouseClickTreeQC_NodeMouseClick;_treeQC.AfterCheckTreeQC_AfterCheck;可选微调改分组字号10→11/12改分组颜色Color.DarkBlue→Color.DarkGreen/Color.Maroon去掉加粗删掉FontStyle.Bold⚠️ 注意用OwnerDrawText模式复选框、加减展开符号、连线仍然是系统原生绘制不会影响勾选功能和你现有的AfterCheck勾选联动完全兼容最简单。坑提醒不要用TreeViewDrawMode.OwnerDrawAll那个需要你自己画复选框麻烦。OwnerDrawText刚好满足你的需求。你直接把上面代码贴进去就能看到分组字体变大变色。要不要我把修改后的整段PipeCheckUserControl构造函数一次性给你替换问题Brushes.GetBrush()不存在.NET WinForms 没有这个方法。替换成SolidBrush记得用完释放画笔防止GDI泄漏。修改 DrawNode 代码privatevoid_treeQC_DrawNode(objectsender,DrawTreeNodeEventArgse){FontnodeFont;ColorforeColor;if(e.Node.TagisstringtagtagGROUP){//分组节点更大字号、加粗、深蓝色nodeFontnewFont(e.Node.TreeView.Font.FontFamily,10,FontStyle.Bold);foreColorColor.DarkBlue;}else{//子节点沿用原有字体nodeFonte.Node.TreeView.Font;foreColorColor.Black;}using(SolidBrushbrushnewSolidBrush(foreColor)){e.Graphics.DrawString(e.Node.Text,nodeFont,brush,e.Bounds.X,e.Bounds.Y);}// 释放新建的字体if(nodeFont!e.Node.TreeView.Font){nodeFont.Dispose();}}命名空间确认需要usingSystem.Drawing;可选优化小细节DrawString 可以微调垂直位置文字对齐更舒服e.Graphics.DrawString(e.Node.Text,nodeFont,brush,e.Bounds.X,e.Bounds.Y2);完整插入位置还是在PipeCheckUserControl类里面直接粘贴这个方法即可构造函数那两行不变_treeQC.DrawModeTreeViewDrawMode.OwnerDrawText;_treeQC.DrawNode_treeQC_DrawNode;测试分组节点字体变大加粗深蓝色子节点保持原样复选框、加减号、勾选逻辑完全不受影响。如果你想我可以顺便把文字的抗锯齿加上文字边缘更平滑。修改要点WinForms TreeView 想要不同节点不同字体大小、文字颜色必须开启OwnerDraw然后处理DrawNode事件。只需要在PipeCheckUserControl构造函数里加2行新增_treeQC_DrawNode方法不用改 LoadCheckTree 其它逻辑。1. 在构造函数中给_treeQC增加设置和事件绑定找到你代码里初始化_treeQC的地方增加这两行_treeQC.DrawModeTreeViewDrawMode.OwnerDrawText;// 自绘文字复选框、加减号由系统画最简单_treeQC.DrawNode_treeQC_DrawNode;放在_treeQC.AfterCheck TreeQC_AfterCheck;后面就行。2. 在 PipeCheckUserControl 类里面新增这个DrawNode方法privatevoid_treeQC_DrawNode(objectsender,DrawTreeNodeEventArgse){FontnodeFont;ColorforeColor;if(e.Node.TagisstringtagtagGROUP){// 分组节点字号更大 蓝色 nodeFontnewFont(e.Node.TreeView.Font.FontFamily,10,FontStyle.Bold);foreColorColor.DarkBlue;}else{// 子检查项默认字体、黑色 nodeFonte.Node.TreeView.Font;foreColorColor.Black;}// 绘制文字e.Graphics.DrawString(e.Node.Text,nodeFont,Brushes.GetBrush(foreColor),e.Bounds.X,e.Bounds.Y);// 释放自定义Font避免GDI资源泄漏if(nodeFont!e.Node.TreeView.Font)nodeFont.Dispose();}完整改动位置对照你原有代码//TreeView_treeQCnewTreeView();_treeQC.DockDockStyle.Fill;_treeQC.CheckBoxestrue;_treeQC.ShowLinestrue;_treeQC.ShowPlusMinustrue;// 新增下面两行 _treeQC.DrawModeTreeViewDrawMode.OwnerDrawText;_treeQC.DrawNode_treeQC_DrawNode;////右键菜单_treeContextMenunewContextMenuStrip();…… _treeQC.NodeMouseClickTreeQC_NodeMouseClick;_treeQC.AfterCheckTreeQC_AfterCheck;可选微调改分组字号10→11/12改分组颜色Color.DarkBlue→Color.DarkGreen/Color.Maroon去掉加粗删掉FontStyle.Bold⚠️ 注意用OwnerDrawText模式复选框、加减展开符号、连线仍然是系统原生绘制不会影响勾选功能和你现有的AfterCheck勾选联动完全兼容最简单。坑提醒不要用TreeViewDrawMode.OwnerDrawAll那个需要你自己画复选框麻烦。OwnerDrawText刚好满足你的需求。你直接把上面代码贴进去就能看到分组字体变大变色。要不要我把修改后的整段PipeCheckUserControl构造函数一次性给你替换结论先说不行不能直接在 TreeNode 上设置字体。TreeNode本身没有Font属性WinForms 的 TreeView 是整棵树共用一套字体节点不能单独存字体对象。 所以只能走OwnerDrawText DrawNode自绘方案但可以去掉颜色只改分组字号代码更简单。你刚才想法groupNode.Font xxx会编译报错TreeNode 没有Font属性。简化版 DrawNode只改分组字体大小不修改颜色privatevoid_treeQC_DrawNode(objectsender,DrawTreeNodeEventArgse){FontnodeFont;if(e.Node.TagisstringtagtagGROUP){//分组节点字号放大加粗颜色和原来保持黑色不变nodeFontnewFont(e.Node.TreeView.Font.FontFamily,10,FontStyle.Bold);}else{//子节点直接使用TreeView默认字体nodeFonte.Node.TreeView.Font;}using(SolidBrushbrushnewSolidBrush(e.Node.ForeColor)){e.Graphics.DrawString(e.Node.Text,nodeFont,brush,e.Bounds.X,e.Bounds.Y2);}if(nodeFont!e.Node.TreeView.Font){nodeFont.Dispose();}}构造函数保留这两行必须加_treeQC.DrawModeTreeViewDrawMode.OwnerDrawText;_treeQC.DrawNode_treeQC_DrawNode;可选调整字号把10改成11/12按需调如果不想加粗删掉FontStyle.BoldnodeFontnewFont(e.Node.TreeView.Font.FontFamily,11);小坑提醒自绘只影响文字复选框、加减号、连线全部原生不变勾选逻辑完全不受影响一定要using画笔 Dispose自定义Font防止GDI资源泄漏LoadCheckTree 里面不需要任何改动保持你现在的代码原样。如果你不想用自绘不想引入DrawNode事件那就没办法实现“分组节点字号更大”原生TreeView不支持单节点独立字体。需要我把完整的 PipeCheckUserControl 里面对应区域给你合并好吗✅ 可以统一整棵TreeView字体放大所有节点一起变大分组和子节点一样大这个不需要自绘DrawNode最简单直接设置_treeQC.Font在创建TreeView的地方写一行即可。_treeQCnewTreeView();_treeQC.DockDockStyle.Fill;_treeQC.CheckBoxestrue;_treeQC.ShowLinestrue;_treeQC.ShowPlusMinustrue;// 新增这一行全局统一Tree字体 _treeQC.FontnewFont(_treeQC.Font.FontFamily,10);// 10 是字号改成11、12都可以想加粗就加 FontStyle.Bold// _treeQC.Font new Font(_treeQC.Font.FontFamily, 11, FontStyle.Bold);特点全部节点分组子项字体一起变大分组和子节点没有区分原生控件不需要DrawNode自绘代码最简单无GDI泄漏坑。两种方案对比全局Font上面这个优点一行代码不用自绘稳定不影响勾选、右键、展开折叠缺点分组和子节点字体大小完全一样不能区分DrawNode自绘刚才的方案优点分组大字体子节点保持小号视觉区分缺点需要开启OwnerDrawText增加DrawNode事件代码如果你选择【全局放大全部tree字体】直接删掉之前加的这两行不要再用自绘// 删掉不要自绘// _treeQC.DrawMode TreeViewDrawMode.OwnerDrawText;// _treeQC.DrawNode _treeQC_DrawNode;然后在_treeQC实例化后加上_treeQC.Font new Font(...)。注意LoadCheckTree 加载树的代码完全不用改动加载出来的所有节点自动使用TreeView设置的字体。你要哪一种A全部节点统一放大最简单无自绘B分组单独放大子节点保持原样需要保留DrawNode自绘

相关新闻

汽车传感器与执行器实战手册:从原理到故障诊断

汽车传感器与执行器实战手册:从原理到故障诊断

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 2:06:49 阅读更多 →
AI编程工具MCP配置统一管理:单一配置源与自动同步实战

AI编程工具MCP配置统一管理:单一配置源与自动同步实战

经常在几个 AI 编程工具之间来回切换的人,应该都有过一种相似的崩溃:刚刚在 Claude Code 里调好的 Postgres MCP 工具,切到 Cursor 要重新配一遍;再打开 Codex,又是另一种格式;稍微一波操作下来&#xff0c…

2026/10/11 2:06:49 阅读更多 →
云原生数据库 MCP 插件评测:Redis 与 Vector DB 插件在上下文注入中的延迟对比

云原生数据库 MCP 插件评测:Redis 与 Vector DB 插件在上下文注入中的延迟对比

在构建复杂的企业级智能体(Agent)系统时,给大模型注入精准的外部记忆与实时上下文(Context Injection)是决定业务成败的关键环节。 随着 Model Context Protocol(MCP)成为标准工具协议&#xff…

2026/10/11 2:05:48 阅读更多 →

最新新闻

RAG实践:FalkorDB属性图索引与Data-Processor管道设计

RAG实践:FalkorDB属性图索引与Data-Processor管道设计

RAG实践笔记(八):把FalkorDB作为属性图索引的Data-Processor管道设计与案例分析老读者都知道,我最近一段时间一直在搞RAG方向的东西。前几篇笔记分别写了文档切分、向量召回、混合检索和重排,今天这篇,想单…

2026/10/11 3:01:20 阅读更多 →
石化智能工厂落地:绕过PPT直连DCS的开源闭环实践

石化智能工厂落地:绕过PPT直连DCS的开源闭环实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 3:01:20 阅读更多 →
YOLOv11遥感多尺度建筑物检测实战:数据切片与增强技巧

YOLOv11遥感多尺度建筑物检测实战:数据切片与增强技巧

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 3:01:20 阅读更多 →
voxtral.c 语音转文字流式解码调度剖析:ada_rms_norm 时间条件与 480ms 延迟窗口

voxtral.c 语音转文字流式解码调度剖析:ada_rms_norm 时间条件与 480ms 延迟窗口

【免费下载链接】voxtral.c Pure C inference of Mistral Voxtral Realtime 4B speech to text model 项目地址: https://gitcode.com/gh_mirrors/vo/voxtral.c 点击查看 免费下载 voxtral.c 是一个用纯 C 实现的 Mistral Voxtral Realtime 4B 语音转文字&#xff…

2026/10/11 3:01:20 阅读更多 →
ElectroSuite 2026 R1 电磁场仿真软件安装部署与许可证配置实战指南

ElectroSuite 2026 R1 电磁场仿真软件安装部署与许可证配置实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 3:01:20 阅读更多 →
InnoDB Undo Log深度解析:从回滚机制到生产环境治理

InnoDB Undo Log深度解析:从回滚机制到生产环境治理

1. 事故现场:被undo撑爆的账务批处理这个系列写到第十一篇,轮到 InnoDB 的 Undo Log(回滚日志)了。我先从一个事故说起:某天夜里的账务批处理任务跑了快四十分钟,业务方临时喊停,运维同事按了下…

2026/10/11 3:00:20 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →