错误面板可优化清单记录
代码阅读总结这是中望CAD插件里质检结果展示的 UserControlQCResultUserControl基于WinForm核心功能两个构造无参构造用于插件启动预创建控件带dwg路径构造直接加载图纸质检数据UI顶部2个筛选下拉框检查项 / 错误级别、刷新、清空按钮中间DGV表格展示质检记录底部状态栏统计数量数据逻辑QCResultDB读取当前图纸质检记录筛选后用BindingList绑定DGV修改【级别】ComboBox单元格时自动写库更新交互双击行根据句柄在CAD里选中实体 缩放定位Ctrl鼠标滚轮缩放行高列宽单元格着色Error红色、Warning黄褐色、Info钢蓝色数据库操作LoadAll、UpdateLevel、Clear清空整张图纸质检记录现有已知小隐患顺带提一句DgvResult_MouseWheel强制同步所有列宽一起增减用户单独手动调某一列宽度后按Ctrl滚轮会覆盖掉手动宽度_allData是内存全量数据ApplyFilter只是内存筛选不会二次读库句柄解析只支持16进制long部分极端句柄场景需要容错你想要新增什么功能给你几个可选方向或者你直接描述需求可选功能清单你挑一个或者自定义✅增加导出功能【导出Excel】按钮把当前筛选后的质检记录导出csv/xlsx✅增加删除单行记录每行增加删除按钮只删除选中这一条质检结果不是全部清空✅增加右键菜单右键行 → 定位实体 / 删除本条记录 / 复制句柄 / 复制错误信息✅增加批量修改级别多选行批量把选中行修改成Info/Warning/Error✅增加高亮实体持久化选中DGV行时CAD实时选中对应实体不需要双击✅增加过滤隐藏已修复项增加【已修复】标记字段增加复选框筛选已修复/未修复✅增加统计饼图在状态栏上方展示各级别数量统计Error几条、Warning几条✅增加复制句柄按钮选中行一键复制实体句柄到剪贴板✅增加查找框文本搜索框模糊搜索错误描述、图层、检查项✅保存用户列宽布局退出控件时保存DGV各列宽度下次打开自动恢复你直接告诉我例如选第3个增加右键菜单包含定位实体、复制句柄、删除本条记录或者你写自己想要的功能描述。需求说明新增按钮选中放在【刷新】、【清空记录】后面。功能点击按钮 → 将当前筛选后表格里所有行对应的实体句柄一次性在CAD里选中批量选中。注意只处理当前筛选可见列表不是_allData全部数据跳过句柄为空、实体已删除的记录。一、需要修改/新增代码位置1. BuildUI 面板顶部添加按钮在 btnClear 后面找到 BuildUI 里面var btnClear new Button...那一段新增btnSelectFilteredvar btnSelectFiltered new Button { Text 选中, Left 620, Top 2, Width 70, Height 28 }; btnSelectFiltered.Click BtnSelectFiltered_Click;然后修改panelTop.Controls.AddRange把这个按钮加进去panelTop.Controls.AddRange(new Control[] { lblCheck, _cboCheckItemFilter, lblLevel, _cboLevelFilter, btnRefresh, btnClear, btnSelectFiltered });注意坐标btnClear Left545宽度70 → btnClear 右边界 54570615所以Left620刚好放在后面如果控件总宽度不够可适当放大UserControl宽度或者调整所有按钮X坐标。2. 新增按钮点击事件BtnSelectFiltered_Clickprivate void BtnSelectFiltered_Click(object sender, EventArgs e) { if (_dgvResult.DataSource is not BindingListQCErrorResult filteredList) return; Document doc ZwSoft.ZwCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument; if (doc null) { MessageBox.Show(没有激活的CAD文档); return; } Database db doc.Database; Editor ed doc.Editor; ListObjectId selectIds new ListObjectId(); int invalidCount 0; using (Transaction tr db.TransactionManager.StartTransaction()) { foreach (var item in filteredList) { if (string.IsNullOrWhiteSpace(item.Handle)) { invalidCount; continue; } try { long hVal long.Parse(item.Handle, NumberStyles.HexNumber); Handle h new Handle(hVal); ObjectId oid db.GetObjectId(false, h, 0); if (oid.IsNull || !oid.IsValid) { invalidCount; continue; } // 尝试打开实体校验是否存在 Entity ent tr.GetObject(oid, OpenMode.ForRead) as Entity; if (ent ! null) { selectIds.Add(oid); } else { invalidCount; } } catch { invalidCount; } } tr.Commit(); } // 交给CAD选中 ed.SetImpliedSelection(selectIds.ToArray()); string msg $批量选中{selectIds.Count} 个实体; if (invalidCount 0) msg ${invalidCount}条记录实体已失效; _lblStatus.Text msg; ed.WriteMessage($\n{msg}); }3. 补充命名空间如果缺少using System.Collections.Generic; using ZwSoft.ZwCAD.DatabaseServices; using ZwSoft.ZwCAD.EditorInput; using ZwSoft.ZwCAD.ApplicationServices;二、完整替换 BuildUI 顶部panel代码段直接替换你原代码//顶部筛选栏 Panel panelTop new Panel(); panelTop.Dock DockStyle.Fill; var lblCheck new Label { Text 检查项, Left 6, Top 8, AutoSize true }; _cboCheckItemFilter new ComboBox { Left 60, Top 4, Width 180, DropDownStyle ComboBoxStyle.DropDownList }; _cboCheckItemFilter.SelectedIndexChanged (s, e) ApplyFilter(); var lblLevel new Label { Text 错误级别, Left 260, Top 8, AutoSize true }; _cboLevelFilter new ComboBox { Left 330, Top 4, Width 120, DropDownStyle ComboBoxStyle.DropDownList }; _cboLevelFilter.SelectedIndexChanged (s, e) ApplyFilter(); var btnRefresh new Button { Text 刷新, Left 470, Top 2, Width 70, Height 28 }; btnRefresh.Click (s, e) LoadResultData(); var btnClear new Button { Text 清空记录, Left 545, Top 2, Width 70, Height 28 }; btnClear.Click BtnClear_Click; //新增选中按钮 var btnSelectFiltered new Button { Text 选中, Left 620, Top 2, Width 70, Height 28 }; btnSelectFiltered.Click BtnSelectFiltered_Click; panelTop.Controls.AddRange(new Control[] { lblCheck, _cboCheckItemFilter, lblLevel, _cboLevelFilter, btnRefresh, btnClear, btnSelectFiltered });三、重要注意点数据源类型_dgvResult.DataSource是BindingListQCErrorResult正好就是当前筛选后的数据集完美符合需求不会把全部数据选中。事务所有GetObject都放在同一个Transaction性能更好避免多次打开事务。异常容错句柄解析失败、实体已删除、ObjectId无效都会计入无效数量状态栏提示。界面宽度问题原UserControl大小600,360现在按钮放到620位置宽度不够。建议把构造BuildUI里this.Size new Size(600, 360);改成this.Size new Size(700, 360);边界场景筛选结果为空点击选中状态栏提示选中0个实体多个筛选条件组合只选中当前筛选结果多个实体跨图层一次性CAD预选四、可选增强如果你需要可选选中之后自动Zoom到所有选中实体的范围框选缩放需要我追加这段代码到BtnSelectFiltered_Click末尾吗或者保持现在只选中不缩放if (!(_dgvResult.DataSource is BindingListQCErrorResult filteredList))完整那一行if (!(_dgvResult.DataSource is BindingListQCErrorResult filteredList))说明C#7.3 不支持is not模式匹配但是支持is带变量声明外层套!()取反即可只改这一行逻辑完全不变。如果你想我顺便把 BtnSelectFiltered_Click 完整替换成兼容 C#7.3 的版本。

相关新闻

C语言算法分析

C语言算法分析

本文通过讲解洛谷中珠心算测验的解题思路带编程小白了解C语言算法&#xff0c;同时会介绍一些函数知识和字符的使用方法&#xff0c;希望大家能够通过这篇文章学到更多编程知识&#xff0c;从而可以更好地运行代码。 一、函数名称及作用 <string.h> 常用函数 函数 …

2026/10/11 2:44:13 阅读更多 →
华为鸿蒙免费戒烟工具—小羊戒烟

华为鸿蒙免费戒烟工具—小羊戒烟

午饭刚放下筷子&#xff0c;手又往烟盒那边伸——饭后一支烟像按了开关。有时硬生生忍住了&#xff0c;过一会儿却忘自己撑过几回&#xff1b;周末回想&#xff0c;只剩“好像少抽了”&#xff0c;本周到底比上周少几支、省了多少&#xff0c;说不清。我想把抽了几支、忍住几次…

2026/10/11 2:44:13 阅读更多 →
ArcGIS属性表字段添加与编辑实战:类型选择、计算器及维护指南

ArcGIS属性表字段添加与编辑实战:类型选择、计算器及维护指南

1. 字段类型没选对&#xff0c;后面全是坑&#xff1a;先把数据需求想明白前天帮同事处理一份小区地块数据入库&#xff0c;忙活半小时后发现面积字段精度对不上&#xff0c;明明算好是123.45平方米&#xff0c;属性表里却挂着123.450000001。我问他当时添加字段选了什么类型&a…

2026/10/11 2:43:12 阅读更多 →

最新新闻

多语言微服务消息可靠性:幂等设计与重试机制实战

多语言微服务消息可靠性:幂等设计与重试机制实战

晚上十点&#xff0c;我盯着监控面板上那个不断攀升的重复消费指标&#xff0c;用户已经反馈“支付成功但订单状态未更新”&#xff0c;而日志里分明看到回调消息被消费了三次。这不是孤立事件。在多语言微服务架构里&#xff0c;消息重复、消息丢失、消费失败几乎是每个团队都…

2026/10/11 3:25:35 阅读更多 →
微服务拆分实战:从限界上下文到订单模块改造

微服务拆分实战:从限界上下文到订单模块改造

/* 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:25:35 阅读更多 →
Python代码风格统一利器:Black格式化工具落地与避坑指南

Python代码风格统一利器:Black格式化工具落地与避坑指南

Black 这个工具&#xff0c;这几年在 Python 圈子里基本成了“格式化”的代名词。它解决的是一个特别老、特别烦的问题&#xff1a;代码风格。你缩进用几个空格、字符串用单引号还是双引号、一行写多长、函数参数怎么换行……这些问题每个项目都能吵上半天&#xff0c;而且吵完…

2026/10/11 3:25:35 阅读更多 →
【计算机毕业设计选题】基于Hadoop+Spark的乳腺癌数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习

【计算机毕业设计选题】基于Hadoop+Spark的乳腺癌数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习

计算机毕设指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01;也可以在主页上或文末下与…

2026/10/11 3:25:35 阅读更多 →
从差评到自研:手把手教你打造低延迟IP-KVM远程管理设备

从差评到自研:手把手教你打造低延迟IP-KVM远程管理设备

/* 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:25:35 阅读更多 →
Doris重复查询优化:基于Redis的结果缓存架构与实战

Doris重复查询优化:基于Redis的结果缓存架构与实战

大多数人说 Doris 查询已经够快了&#xff0c;为什么还要折腾 Redis&#xff1f;这个问题的答案往往不在 Doris 身上&#xff0c;而在“重复查询”这四个字上。我见过太多 BI 看板、定时报表、接口轮询&#xff0c;把同样一条 SQL 在 Doris 上反复执行&#xff0c;一分钟几十次…

2026/10/11 3:24:35 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

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

周新闻

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

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

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

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

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

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

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

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

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