news 2026/10/14 6:14:51

CheckedListBox 显示中文,后台存英文

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CheckedListBox 显示中文,后台存英文

CheckedListBox 显示中文,后台存英文(显示/值分离)

CheckedListBox的 Item 可以不存字符串,存对象:对象里面一个是给界面显示的中文,一个是程序逻辑用的英文实体名。界面展示中文;你取选中项的时候拿到对象,直接读英文字段,不需要做映射转换。

1. 定义简单实体类

/// <summary> /// CAD实体类型,界面显示中文,程序使用英文 /// </summary> public class EntityTypeItem { /// <summary>界面给用户看的中文</summary> public string DisplayText { get; set; } /// <summary>程序内部使用的CAD英文实体名</summary> public string EntityName { get; set; } // 控制CheckedListBox显示什么文本 public override string ToString() { return DisplayText; } }

关键点:重写ToString(),CheckedListBox 就会拿这个当显示文本,Items 内部存完整对象。

2. 绑定数据

private CheckedListBox _chkEntityTypes; // 初始化,中文显示,底层存英文 var entityList = new List<EntityTypeItem> { new EntityTypeItem{ DisplayText = "插入块(INSERT)", EntityName = "INSERT"}, new EntityTypeItem{ DisplayText = "直线(LINE)", EntityName = "LINE"}, new EntityTypeItem{ DisplayText = "多段线(LWPOLYLINE)", EntityName = "LWPOLYLINE"}, new EntityTypeItem{ DisplayText = "单行文本(TEXT)", EntityName = "TEXT"}, new EntityTypeItem{ DisplayText = "多行文本(MTEXT)", EntityName = "MTEXT"}, }; _chkEntityTypes.Items.Clear(); foreach (var item in entityList) { _chkEntityTypes.Items.Add(item); }

界面效果:列表里用户看到插入块(INSERT),可读性很好,括号带上英文方便查问题。

3. 获取选中项(直接拿到英文,无需映射)

// 获取所有勾选的CAD实体英文名称 List<string> selectedEntityNames = new List<string>(); for (int i = 0; i < _chkEntityTypes.CheckedItems.Count; i++) { var itm = _chkEntityTypes.CheckedItems[i] as EntityTypeItem; if(itm != null) { selectedEntityNames.Add(itm.EntityName); } } // selectedEntityNames 里面直接就是 ["INSERT","LINE"...],直接给CAD逻辑用

备选方案对比

方案A:上面对象方案(✅推荐)

  • 用户看中文(可附带英文备注)
  • 代码直接取英文,不用字典映射、不用字符串翻译
  • 不需要维护外部说明文档
  • 序列化/保存配置的时候,直接存EntityName字段即可

方案B:界面显示中文,维护一个字典做中英文映射

Dictionary<string, string> dict = new Dictionary<string, string>() { {"插入块","INSERT"}, {"直线","LINE"}, };

缺点:来回查表;新增类型要同时改两处,容易漏,容易bug。

方案C:界面直接显示英文,写说明文档

适合工具是内部工具,使用者懂CAD;缺点:小白上手懵。

方案D:显示中文(英文),就是示例代码里的写法

兼顾小白与开发调试,出日志、截图的时候英文也看得见,非常适合CAD工具。

扩展:如果需要保存/加载勾选状态

保存配置时只保存EntityName字符串集合;加载时遍历 Items,匹配EntityName设置勾选状态。

//加载勾选 var saveNames = new HashSet<string>{"INSERT","LINE"}; for(int i=0;i<_chkEntityTypes.Items.Count;i++) { var obj = _chkEntityTypes.Items[i] as EntityTypeItem; _chkEntityTypes.SetItemChecked(i, saveNames.Contains(obj.EntityName)); }

小坑提醒

CheckedListBox不要用DataSource,很多版本下CheckedListBox绑定DataSource后勾选状态容易出诡异bug;优先用Items.Add()添加对象,就是上面示例写法。

如果你想,我可以把这一段整理成可直接复制进你项目的完整片段。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 6:14:38

家居装修AI智能咨询助手:知识库+RAG搭建实战

装修这件事&#xff0c;我见过太多人卡在第一步&#xff1a;信息太多&#xff0c;不知道信谁。百度一搜装修预算&#xff0c;蹦出来几十个相互矛盾的答案&#xff1b;问三个装修公司&#xff0c;能给你报出三个完全对不上的价格体系&#xff1b;翻了两周小红书&#xff0c;收藏…

作者头像 李华
网站建设 2026/10/14 6:14:19

PS5远程串流实操指南:从局域网到公网,打造低延迟远程游玩方案

把游戏主机从电视机前面解放出来&#xff0c;这句话我在圈子里喊了很多年&#xff0c;真正落地之后才发现&#xff0c;难点不在“能不能串流”&#xff0c;而在“稳定地串流到任何场景”。所谓 AnyPS5&#xff0c;并不是某个成品软件或者硬件&#xff0c;而是我给自己那台第五代…

作者头像 李华
网站建设 2026/10/14 6:14:14

Llama 3 FP8量化与128K长上下文工程落地实战

1. 项目概述&#xff1a;这不是一次普通模型测评&#xff0c;而是一次面向工程落地的深度拆解最近在多个技术社区和开发者群聊里&#xff0c;“Llama 3 精读”这个关键词频繁刷屏&#xff0c;但多数讨论停留在“开源了”“参数量大”“支持长文本”这类表层信息。真正动手跑通、…

作者头像 李华
网站建设 2026/10/14 6:14:13

2026降AI率工具横评:免费与付费的真实差距

我其实不太喜欢“降AI率”这个词&#xff0c;但过去大半年里&#xff0c;找我咨询这个问题的朋友实在太多了&#xff1a;做自媒体的要过平台原创检测&#xff0c;做运营的要控制内容生产节奏&#xff0c;写方案的要让报告读起来不那么模块化&#xff0c;甚至有几位高校老师&…

作者头像 李华
网站建设 2026/10/14 6:14:03

模型量化数学原理深度解析:从仿射映射到误差传播

1. 从一个反直觉的现象说起&#xff1a;为什么量化后的模型反而“更聪明”了很多人第一次接触模型量化&#xff0c;脑子里冒出的第一个念头是&#xff1a;把高精度的浮点数砍成低比特整数&#xff0c;这不是在“降智”吗&#xff1f;精度掉了&#xff0c;模型还能用&#xff1f…

作者头像 李华
网站建设 2026/10/14 6:12:32

二叉树递归进阶:三类经典题吃透返回值设计与分治重建

今天打卡算法训练营第16天&#xff0c;三道题分别是“找树左下角的值”、“路径总和”、“从中序与后序遍历序列构造二叉树”。前两道是二叉树递归的经典应用&#xff0c;第三道是二叉树重建&#xff0c;难度明显上了一个台阶。这三道题放一起其实挺妙&#xff1a;前两道练递归…

作者头像 李华