资讯详情

资讯详情

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 ListEntityTypeItem { 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实体英文名称 Liststring selectedEntityNames new Liststring(); 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界面显示中文维护一个字典做中英文映射Dictionarystring, string dict new Dictionarystring, string() { {插入块,INSERT}, {直线,LINE}, };缺点来回查表新增类型要同时改两处容易漏容易bug。方案C界面直接显示英文写说明文档适合工具是内部工具使用者懂CAD缺点小白上手懵。方案D显示中文(英文)就是示例代码里的写法兼顾小白与开发调试出日志、截图的时候英文也看得见非常适合CAD工具。扩展如果需要保存/加载勾选状态保存配置时只保存EntityName字符串集合加载时遍历 Items匹配EntityName设置勾选状态。//加载勾选 var saveNames new HashSetstring{INSERT,LINE}; for(int i0;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()添加对象就是上面示例写法。如果你想我可以把这一段整理成可直接复制进你项目的完整片段。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →