当前位置: 首页 > news >正文

winform 下拉框ComboBox绘制颜色选项,下拉颜色使用系统已知的

 

封装类

   public class ColorComboBox : ComboBox{private int _colorBoxWidth = 20;private int _colorBoxMargin = 2;private Color _colorBoxBorderColor = Color.Black;public ColorComboBox(){DrawMode = DrawMode.OwnerDrawFixed;DropDownStyle = ComboBoxStyle.DropDownList;LoadAllKnownColors(); // 加载所有已知颜色// --- 添加以下代码来设置默认选中红色 ---// 方法1:通过索引查找 (推荐,准确)for (int i = 0; i < Items.Count; i++){if (Items[i] is Color color && color.ToArgb() == Color.Red.ToArgb()){this.SelectedIndex = i;break;}}}public int ColorBoxWidth{get { return _colorBoxWidth; }set { _colorBoxWidth = value; Invalidate(); }}public int ColorBoxMargin{get { return _colorBoxMargin; }set { _colorBoxMargin = value; Invalidate(); }}public Color ColorBoxBorderColor{get { return _colorBoxBorderColor; }set { _colorBoxBorderColor = value; Invalidate(); }}public string ColorMember { get; set; } /// <summary>/// 加载所有 KnownColor 枚举的颜色到下拉项中。/// 如果已设置 DataSource,则此方法无效(因为 DataSource 优先)。/// </summary>public void LoadAllKnownColors(){if (DataSource != null)return; // 数据绑定状态下不加载
Items.Clear();foreach (KnownColor kc in Enum.GetValues(typeof(KnownColor))){Items.Add(Color.FromKnownColor(kc));}}protected override void OnDrawItem(DrawItemEventArgs e){if (e.Index < 0 || e.Index >= Items.Count){base.OnDrawItem(e);return;}object item = Items[e.Index];if (item == null){base.OnDrawItem(e);return;}e.DrawBackground();Color itemColor = GetItemColor(item);string displayText = GetItemDisplayText(item);Rectangle boxRect = new Rectangle(e.Bounds.Left + ColorBoxMargin,e.Bounds.Top + ColorBoxMargin,ColorBoxWidth,e.Bounds.Height - ColorBoxMargin * 2);using (SolidBrush colorBrush = new SolidBrush(itemColor)){e.Graphics.FillRectangle(colorBrush, boxRect);}using (Pen borderPen = new Pen(ColorBoxBorderColor)){e.Graphics.DrawRectangle(borderPen, boxRect);}TextRenderer.DrawText(e.Graphics,displayText,e.Font,new Point(boxRect.Right + ColorBoxMargin, e.Bounds.Top + ColorBoxMargin),e.ForeColor);e.DrawFocusRectangle();}private Color GetItemColor(object item){if (!string.IsNullOrEmpty(ColorMember)){var prop = item.GetType().GetProperty(ColorMember);if (prop != null){object value = prop.GetValue(item);if (value is Color)return (Color)value;if (value is string)return ColorFromString(value.ToString());try{return ColorFromString(value.ToString());}catch { }}}if (item is Color)return (Color)item;return ColorFromString(item.ToString());}private Color ColorFromString(string name){try{return Color.FromName(name);}catch{return Color.Empty;}}private string GetItemDisplayText(object item){return GetItemText(item);}}

 

http://www.jsqmd.com/news/428010/

相关文章:

  • 应对简易改装飞行器威胁的光电对抗技术和防卫策略
  • C#全套源代码:手机组态APP监控西门子S7-1200 PLC的无线WiFi通信
  • 2026年评价高的襄阳本地装修全包/襄阳现代简约装修可靠供应商推荐 - 行业平台推荐
  • 新年规划更清晰,OCR 办公更高效
  • Telerik UI for .NET MAUI 2026 Q1轻松输入和编辑多行文本
  • Lychee Rerank MM:基于Qwen2.5-VL的排序系统优化技巧
  • Nacos安装下载教程
  • 2026 年四川搬家服务企业权威推荐| 厂房搬家、单位搬家、钢琴搬运、设备搬运优质机构盘点 - 深度智识库
  • 2026年3月马耳他移民中介推荐,口碑机构实测与费用明细参考 - 品牌鉴赏师
  • 2026焊接机器人管线包专业厂家推荐榜:abb机器人管线包/工业机器人管线包/点焊机器人管线包/选择指南 - 优质品牌商家
  • 云南机床代理怎么选?常州葵发机电带来的6家实力伙伴盘点 - 企师傅推荐官
  • 2026年热门的传感器连接器/信号编码器连接器厂家专业度参考(精选) - 行业平台推荐
  • 2026年比较好的直流电源/高压直流电源厂家选择指南 - 行业平台推荐
  • 邦芒宝典:面试时HR最喜欢问的12个问题
  • 万里通积分卡回收全流程教程:避坑指南+常见问题 - 团团收购物卡回收
  • 2026年3月钢结构通风天窗厂家推荐,适配钢结构厂房专业厂家 - 品牌鉴赏师
  • 04 如果 是 RAID 模式,无法识别固态
  • 基于小波变换的多光谱与全色图像融合MATLAB实现
  • 2026年热门的规划馆展馆运维/博物馆展馆运维优质选择推荐平台 - 行业平台推荐
  • 2026年质量好的熏蒸木托盘/二手木托盘采购指南厂家怎么选 - 行业平台推荐
  • 不同规模企业如何选 AI 绩效管理系统?厂商适配指南
  • 2KW H型风力发电机机械变桨驱动机构设计
  • ‌工具ROI计算器:效率提升换算表
  • 沙、海、山、城共生,这座西北小城藏着世界级奇观
  • 2026年质量好的规划馆展馆运营/展馆运营高性价比推荐厂家 - 行业平台推荐
  • ‌跨浏览器测试:云平台矩阵解决方案
  • 2026年口碑好的耐酸涂料/耐硝酸涂料口碑好的厂家推荐 - 行业平台推荐
  • 【优化调度】基于matlab IGSAPSO低碳电动汽车调度【含Matlab源码 15090期】
  • ‌无代码测试平台崛起:软件测试从业者的角色重构与能力升维
  • PP-DocLayoutV3效果展示:复杂合同版面分析,精准定位页眉页脚和公式