修改要点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自绘