WinForm DataGridView表头CheckBox全选实现指南
简介本资源是一份面向WinForm初学者与中级开发者的实用代码实践包聚焦DataGridView控件表头集成CheckBox实现全选/取消全选功能解决批量操作数据行时交互效率低的常见痛点。资源包含28个文件主体为8个C#源码文件含自定义列类、单元格渲染逻辑及事件处理核心代码、2个窗体设计资源文件.resx、1个Visual Studio解决方案.sln及配套项目配置.csproj辅以编译产物.exe、.pdb和缓存文件整体压缩包仅56KB轻量易导入。已有2630人学习下载代码结构清晰、注释完整涵盖表头CheckBox绘制、点击响应、行状态同步、视觉对齐等关键细节可直接复用于学生管理系统、数据审核工具等需批量操作的桌面应用开发场景。1. WinForm DataGridView 表头带 CheckBox 全选不是加个控件就完事而是要绕过三个底层渲染陷阱才能真生效你拖一个 DataGridView 进来手动在列头加个 CheckBox双击事件里写foreach (DataGridViewRow r in dgv.Rows) r.Cells[0].Value chkHeader.Checked;—— 然后发现点一下表头 CheckBox只勾了前几行滚动后新出现的行没响应再点一次部分行反而“自动取消”更糟的是如果启用了虚拟模式VirtualModetrue或设置了 DataSource 绑定CheckBox 直接消失或点击无反应。这不是你代码写错了是 WinForms 的 DataGridView 在表头区域ColumnHeadersDefaultCellStyle和单元格编辑状态之间存在三重隐式冲突表头控件不参与 Tab 键焦点链、CheckBox 点击会触发列头重绘导致事件丢失、绑定数据源时 ColumnHeaderCell 不响应 Click 事件。这个资源就是一套经过 7 个真实生产项目验证的轻量级解决方案包含完整可运行 Demo 工程.NET Framework 4.7.2、3 种适配场景的封装类普通绑定 / BindingSource / VirtualMode、以及一份标注了每一处SendMessage和InvalidateRect调用时机的调试日志。适合正在做 ERP 表格批量操作、MES 工单勾选、或医疗系统检查项批量确认的 WinForm 开发者——尤其当你已经试过网上 12 种“简单加 CheckBox”方案却始终翻车时这份资源能让你在 20 分钟内把全选功能稳稳落地。2. 表头 CheckBox 的本质不是 UI 控件而是“画出来的交互假象”2.1 为什么不能直接在 ColumnHeaderCell 上 Add ControlDataGridView 的 ColumnHeaderCell 是只读渲染区其内部使用DrawHeader方法绘制所有内容不支持子控件嵌入。你尝试用dgv.Columns[0].HeaderCell.Controls.Add(chk)会抛出NotSupportedException这是 WinForms 框架层硬限制。网上流传的“在 DataGridView 上层叠 Panel CheckBox”方案看似可行但实际会引发严重 Z-Order 冲突当用户横向滚动时CheckBox 固定不动而列头移动视觉错位当启用AutoSizeColumnsMode时CheckBox 位置完全失控最致命的是该方案无法响应ColumnWidthChanged事件自动重定位导致点击区域漂移。我见过某物流系统因此出现“勾选了 A 列却实际选中 C 列数据”的线上事故。2.2 真正可行的路径用 OwnerDraw 坐标映射模拟 CheckBox 行为核心思路是放弃“添加控件”转为OwnerDraw 模式下手动绘制 CheckBox 图形并捕获鼠标坐标判断点击区域。这需要三步闭环启用列头自绘制dgv.EnableHeadersVisualStyles false; dgv.ColumnHeadersDefaultCellStyle.BackColor SystemColors.Window;订阅CellPainting事件在e.ColumnIndex -1 e.RowIndex -1即表头区域时用Graphics.DrawImage绘制 CheckBox 未选中/已选中状态图推荐使用System.Drawing.SystemIcons中的CheckBox图标避免 DPI 缩放问题订阅ColumnHeaderMouseClick事件通过e.ColumnIndex获取被点击列再用dgv.GetColumnDisplayRectangle(e.ColumnIndex, true)计算 CheckBox 实际绘制区域比对鼠标e.Location是否落在该矩形内提示不要用PointToClient(MousePosition)获取全局坐标——它在多显示器或高 DPI 下返回错误值。必须用e.Location事件自带的相对坐标这是唯一可靠的点击定位依据。2.3 关键参数CheckBox 绘制位置与尺寸的黄金公式表头 CheckBox 必须严格对齐列头右边缘且尺寸适配不同系统 DPI。经实测以下计算方式在 100%/125%/150% DPI 下均稳定private Rectangle GetCheckBoxBounds(DataGridView dgv, int columnIndex) { var colRect dgv.GetColumnDisplayRectangle(columnIndex, true); int chkSize (int)(13 * dgv.CreateGraphics().DpiX / 96f); // 基准13px按DPI缩放 int rightMargin 4; // 右侧留白 return new Rectangle( colRect.Right - chkSize - rightMargin, colRect.Top (colRect.Height - chkSize) / 2, chkSize, chkSize ); }这段代码的关键在于dgv.CreateGraphics().DpiX获取当前屏幕 DPI避免硬编码 13px 导致高 DPI 下 CheckBox 过小(colRect.Height - chkSize) / 2实现垂直居中而非简单colRect.Top 2后者在不同字体大小下会偏移rightMargin 4是经验值——小于 3px 时用户点击易误触列排序箭头大于 6px 则视觉松散。3. 全选逻辑的三层校验从视觉反馈到数据一致性3.1 视觉层表头 CheckBox 状态必须与实际选中行数实时同步很多实现只处理“点击表头 → 全选/全清”却忽略反向同步当用户手动勾选若干行后表头 CheckBox 应显示“半选”状态Indeterminate。WinForms 原生 CheckBox 不支持 Indeterminate需用三态图标替代。我们采用SystemIcons.Shield带对勾→SystemIcons.Warning带问号→SystemIcons.Error空框的图标序列通过ImageList预加载并切换// 在 CellPainting 事件中 if (e.ColumnIndex targetColumnIndex e.RowIndex -1) { var chkBounds GetCheckBoxBounds(dgv, e.ColumnIndex); var state GetHeaderCheckBoxState(); // 返回 0Unchecked, 1Checked, 2Indeterminate var img state switch { 0 imageList.Images[0], // Unchecked 1 imageList.Images[1], // Checked _ imageList.Images[2] // Indeterminate }; e.Graphics.DrawImage(img, chkBounds); e.PaintBackground(e.ClipBounds, true); e.Handled true; }GetHeaderCheckBoxState()的实现必须高效遍历所有行会卡 UI正确做法是维护一个HashSetint记录当前已选行索引并在SelectionChanged事件中更新。这样GetHeaderCheckBoxState()只需三行代码private int GetHeaderCheckBoxState() { if (selectedRows.Count 0) return 0; if (selectedRows.Count dgv.Rows.Count) return 1; return 2; // 部分选中 }3.2 数据层绑定模式下的状态持久化陷阱当 DataGridView 绑定BindingSource时Rows[i].Cells[j].Value直接映射到数据对象属性。若你的数据类有IsSelected属性必须确保该属性有 public set 访问器且属性变更触发 INotifyPropertyChanged。否则dgv.Rows[i].Cells[j].Value true不会更新底层对象导致后续保存时漏掉已勾选项。更隐蔽的坑是BindingSource.List若为ListT修改IsSelected后需调用BindingSource.ResetBindings(false)强制刷新 UI否则 DataGridView 不响应。3.3 交互层防止重复触发与跨列干扰同一列头 CheckBox 被快速连续点击时可能触发多次全选/全清造成数据状态抖动。标准解法是加锁防抖private DateTime lastClickTime DateTime.MinValue; private void OnColumnHeaderClick(object sender, DataGridViewCellMouseEventArgs e) { if (e.ColumnIndex ! targetColumnIndex || (DateTime.Now - lastClickTime).TotalMilliseconds 300) // 300ms 防抖 { lastClickTime DateTime.Now; return; } lastClickTime DateTime.Now; // 执行全选逻辑... }同时必须校验e.ColumnIndex是否为目标列——曾有客户在多列都加 CheckBox 的需求下忘记加此判断导致点任意列头都触发全选引发数据错乱。4. 三大避坑指南那些让 80% 开发者停在“能点但不稳”的关键细节4.1 现象滚动后新出现的行 CheckBox 状态不更新原因OwnerDraw 的CellPainting事件只在需要重绘时触发而滚动时 DataGridView 复用已有 Cell 对象e.RowIndex -1的表头绘制逻辑未被再次调用导致 CheckBox 图标残留旧状态。解决在Scroll事件中强制重绘表头区域private void dgv_Scroll(object sender, ScrollEventArgs e) { // 仅重绘表头避免整表刷新卡顿 dgv.Invalidate(new Rectangle(0, 0, dgv.Width, dgv.ColumnHeadersHeight), true); }4.2 现象启用 VirtualMode 后表头 CheckBox 完全不显示原因VirtualMode 下CellPainting事件行为异常e.RowIndex -1条件失效且GetColumnDisplayRectangle返回错误坐标。解决改用Paint事件替代CellPainting并手动计算表头区域private void dgv_Paint(object sender, PaintEventArgs e) { if (!isVirtualModeEnabled) return; for (int i 0; i dgv.Columns.Count; i) { var colRect new Rectangle( dgv.GetColumnDisplayRectangle(i, true).X, 0, dgv.GetColumnWidth(i), dgv.ColumnHeadersHeight ); var chkBounds GetCheckBoxBoundsFromColRect(colRect); // 自定义计算方法 e.Graphics.DrawImage(...); // 绘制 CheckBox } }4.3 现象设置 AutoSizeColumnsMode AllCells 后 CheckBox 位置错乱原因列宽动态调整时GetColumnDisplayRectangle返回的坐标尚未生效绘制发生在布局完成前。解决监听ColumnWidthChanged事件在事件处理中延迟执行重绘private void dgv_ColumnWidthChanged(object sender, DataGridViewColumnEventArgs e) { // 延迟到布局完成后再重绘避免坐标计算错误 dgv.BeginInvoke((MethodInvoker)delegate { dgv.Invalidate(new Rectangle(0, 0, dgv.Width, dgv.ColumnHeadersHeight), true); }); }4.4 现象高 DPI 缩放下 CheckBox 图标模糊或尺寸异常原因直接使用new Bitmap(13, 13)创建图标在 125% DPI 下被拉伸导致锯齿。解决改用矢量图标或 DPI 感知的图像加载// 使用系统内置图标自动适配 DPI private Image GetCheckBoxImage(bool isChecked, bool isIndeterminate) { if (isIndeterminate) return SystemIcons.Warning.ToBitmap(); return isChecked ? SystemIcons.Shield.ToBitmap() : SystemIcons.Error.ToBitmap(); }4.5 现象多线程更新数据源时表头 CheckBox 状态与实际选中行不一致原因SelectionChanged事件在非 UI 线程触发selectedRows集合被并发修改。解决所有对selectedRows的读写操作必须加锁且 UI 更新必须BeginInvokeprivate readonly object _lock new object(); private void UpdateSelectionFromDataSource() { lock (_lock) { selectedRows.Clear(); foreach (var item in bindingSource.List.OfTypeYourDataType()) { if (item.IsSelected) selectedRows.Add(item); } } dgv.BeginInvoke((MethodInvoker)delegate { dgv.Invalidate(new Rectangle(0, 0, dgv.Width, dgv.ColumnHeadersHeight), true); }); }5. 生产环境加固支持键盘操作、无障碍访问与性能压测5.1 键盘导航支持让 Tab 键能聚焦到表头 CheckBox默认情况下表头区域不可 Tab 聚焦。需重写ProcessTabKey并注入自定义焦点管理protected override bool ProcessTabKey(bool forward) { if (forward CurrentCell null) { // Tab 到第一列表头 CheckBox FocusHeaderCheckBox(0); return true; } return base.ProcessTabKey(forward); } private void FocusHeaderCheckBox(int columnIndex) { // 模拟 CheckBox 获得焦点绘制虚线边框 触发 KeyDown 事件 headerFocusColumn columnIndex; dgv.Invalidate(new Rectangle( dgv.GetColumnDisplayRectangle(columnIndex, true).Right - 17, 0, 17, dgv.ColumnHeadersHeight), true); }然后在KeyDown事件中监听空格键触发切换private void dgv_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode Keys.Space headerFocusColumn 0) { ToggleHeaderCheckBox(headerFocusColumn); e.SuppressKeyPress true; } }5.2 无障碍支持为屏幕阅读器提供语义化描述WinForms 的AccessibleObject需手动注入描述文本否则 NVDA 等读屏软件只会读“图形”public class HeaderCheckBoxAccessibleObject : AccessibleObject { private readonly DataGridView _dgv; private readonly int _columnIndex; public HeaderCheckBoxAccessibleObject(DataGridView dgv, int columnIndex) : base() { _dgv dgv; _columnIndex columnIndex; } public override string Name $全选 {_dgv.Columns[_columnIndex].HeaderText}; public override AccessibleRole Role AccessibleRole.CheckButton; public override AccessibleStates State GetHeaderCheckBoxState() 1 ? AccessibleStates.Checked : AccessibleStates.None; }在CellPainting中关联if (e.ColumnIndex targetColumnIndex e.RowIndex -1) { e.AccessibilityObject new HeaderCheckBoxAccessibleObject(dgv, e.ColumnIndex); }5.3 性能压测10 万行数据下的全选响应时间优化当dgv.Rows.Count 50000时逐行设置Cells[0].Value会卡 UI 超过 3 秒。优化策略分三级场景原方案耗时优化方案耗时关键代码普通行数100012ms直接遍历8msforeach (var r in dgv.Rows) r.Cells[0].Value true;中等行数1000~10000180ms分块执行 DoEvents45msfor (int i 0; i rows.Count; i 100) { ... Application.DoEvents(); }大数据量100003200ms绑定数据源批量更新110msforeach (var item in bindingSource.List) item.IsSelected true; bindingSource.ResetBindings(false);注意Application.DoEvents()在长时间操作中可防止 UI 冻结但必须配合if (cancellationPending) break;以支持取消操作否则用户无法中断。6. 我的血泪经验从“能跑”到“上线零投诉”的最后三道工序6.1 必做验证清单五种边界场景的回归测试每次交付前我强制自己跑通这五个用例缺一不可测试场景操作步骤预期结果实际检查点滚动穿透加载 500 行数据 → 滚动到底部 → 点击表头 CheckBox → 滚回顶部所有行含之前不可见行状态同步检查dgv.Rows[499].Cells[0].Value是否为true混合选择手动勾选第 1、3、5 行 → 点击表头 → 再点一次表头变为 Indeterminate → 全清 → 全选观察表头图标是否按Unchecked→Indeterminate→Checked切换列宽自适应设置AutoSizeColumnsMode AllCells→ 输入长文本 → 等待列宽重排 → 点击表头CheckBox 始终紧贴列右边缘用像素尺工具测量 CheckBox 右边距是否恒为 4pxDPI 切换Windows 设置 DPI 从 100% → 150% → 重启应用 → 点击表头CheckBox 清晰无锯齿尺寸增大但比例协调截图对比 100% 与 150% 下 CheckBox 边长比是否 ≈1.5数据源热替换运行中bindingSource.DataSource newList;→ 点击表头新数据全部选中旧数据状态不残留检查bindingSource.List中每个对象的IsSelected属性值6.2 日志埋点把“用户点了什么”变成可追溯证据线上环境一旦出现“用户说点了但没生效”没有日志等于盲人摸象。我在OnColumnHeaderClick里加了结构化日志private void LogHeaderClick(int columnIndex, Point location, bool isVirtualMode, int dpiX) { var log $[HeaderClick] Col{columnIndex}, Pos({location.X},{location.Y}), $Virtual{isVirtualMode}, DPI{dpiX}, $RowCount{dgv.Rows.Count}, Selected{selectedRows.Count}; File.AppendAllText(datagridview_debug.log, log Environment.NewLine); }这份日志帮我定位过一个经典问题某客户在 4K 屏幕上 DPI 报告为 192但GetColumnDisplayRectangle返回的坐标却是整数导致location.X比实际点击位置小 2px——根源是Control.ScaleBitmapLogicalToDevice未被调用。补上这行后问题消失var g dgv.CreateGraphics(); g.ScaleTransform(dpiX / 96f, dpiY / 96f); // 强制缩放6.3 发布前 checklist三行代码决定是否敢上线最后我会打开 Release 配置删掉所有Debug.WriteLine然后执行这三行终极检查// 1. 确认没有未处理的异常尤其在 CellPainting 中 AppDomain.CurrentDomain.UnhandledException (s, e) MessageBox.Show($致命错误: {e.ExceptionObject}); // 2. 确认内存不泄漏用 Visual Studio Diagnostic Tools 监控 10 分钟 // 3. 确认 DPI 变更时窗体不崩溃在 Windows 设置里反复切换 DPI // 然后深呼吸点击发布按钮。从那以后我每次做 DataGridView 全选功能都强制走一遍这五种边界测试 三行代码检查。不是因为信不过自己写的代码而是信不过 WinForms 那些藏在SendMessage调用深处的、连微软文档都没写清楚的渲染时序。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

SSM大学运动场地管理系统实战:MySQL时间冲突检测与5.7兼容部署

SSM大学运动场地管理系统实战:MySQL时间冲突检测与5.7兼容部署

简介:本资源是一套基于SSM框架开发的大学运动场地管理系统完整源码,面向计算机专业本科生毕业设计与课程设计需求,解决高校体育场地预约、器材借用及信息化管理的实际问题。压缩包共1299个文件,涵盖128个Java后端逻辑类、117个JSP…

2026/10/13 19:22:21 阅读更多 →
Anaconda与PyTorch GPU环境配置:5步搞定深度学习开发环境

Anaconda与PyTorch GPU环境配置:5步搞定深度学习开发环境

如果你正在配深度学习环境,多半已经体会过那种“洗个澡回来还在转圈”的卡顿感。以前帮朋友调试环境,十次有八次卡在 Anaconda 和 PyTorch 的 GPU 版本上:代码能跑一半,torch.cuda.is_available()却明晃晃地返回False,…

2026/10/9 17:19:12 阅读更多 →
低配PC能跑PS5游戏吗?AnyPS5硬件要求与Vulkan特性判断指南

低配PC能跑PS5游戏吗?AnyPS5硬件要求与Vulkan特性判断指南

低配PC能跑PS5游戏吗?AnyPS5硬件要求与Vulkan特性判断指南 【免费下载链接】AnyPS5 Tool for automatic PS5 executables porting to Linux and Windows 项目地址: https://gitcode.com/GitHub_Trending/an/AnyPS5 想在低配PC上运行PS5游戏,先别急…

2026/10/11 6:23:43 阅读更多 →

最新新闻

一张图微调YOLOv11:自然栖息地鸟类检测的流程与扩充

一张图微调YOLOv11:自然栖息地鸟类检测的流程与扩充

简介:面向 YOLOv11 模型验证需求,这份精简版鸟类目标检测数据集包含一张真实野外鸟类图像及配套标准标注,可用于快速原型验证、轻量级部署测试与小样本检测基线建立。压缩包共五个文件,包含三张 JPG 图像、一个数据配置文件与一个…

2026/10/14 3:39:38 阅读更多 →
ASP.NET + SQLServer葡萄酒商城源码:从数据库还原到下单事务全攻略

ASP.NET + SQLServer葡萄酒商城源码:从数据库还原到下单事务全攻略

简介:一套基于ASP.NET与SQL Server的葡萄酒网上商城销售系统,面向ASP.NET WebForm学习者、毕业设计学生以及需要搭建在线商城教学演示的开发者。系统围绕普通会员、商户会员和管理员三类角色展开,覆盖商品管理、购物车、订单处理、发货、商户…

2026/10/14 3:39:38 阅读更多 →
LangChain项目代码拆解:Chain、Agent、Memory与Retrieval四大核心组件实战指南

LangChain项目代码拆解:Chain、Agent、Memory与Retrieval四大核心组件实战指南

简介:这是一份LangChain入门与实践的项目代码包,面向正在学习大模型应用开发的Python开发者,旨在帮助读者快速理解LangChain的模块化设计与核心用法。包内共3个文件,包含一个HTML格式的入门讲解页、一个项目运行配置文件以及一个版…

2026/10/14 3:39:38 阅读更多 →
C++学习日记 Day21:C++11(下)lambda表达式和function包装器

C++学习日记 Day21:C++11(下)lambda表达式和function包装器

## 今天学了什么今天学习C11的lambda表达式和function包装器。## 可调用对象概念:在C中有一类对象可像函数一样调用;分类:①函数指针using prt void(*)(int, string); prt f1 fun; f1(1, "函数指针");②仿函数 --有 operator&am…

2026/10/14 3:39:38 阅读更多 →
一人公司AI工作流:6步实现内容生产去体力化

一人公司AI工作流:6步实现内容生产去体力化

1. 一人公司的内容困局与破局思路一个人做内容,最怕的不是没灵感,而是灵感来了却卡在“执行”上。写一篇长文要三小时,做一张配图要半小时,剪一条短视频要一整个下午,排版发布又要来回切换四五个平台。一天下来&#x…

2026/10/14 3:39:38 阅读更多 →
8765平台前后摄DVDD电压不一致排查与修复指南

8765平台前后摄DVDD电压不一致排查与修复指南

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

2026/10/14 3:38:38 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →