核心代码:重写DrawItem事件

  1. void Event_CboDrawItem(object sender, DrawItemEventArgs e)
  2. {
  3. if (e.Index < ) return;
  4. var cbo = sender as ComboBox;
  5. if (cbo == null) return;
  6.  
  7. Graphics g = e.Graphics;
  8. System.Drawing.Rectangle r = e.Bounds;
  9. ImageList tmpImg = null;
  10. if (cbo == cboOriginLang) tmpImg = imgLstOrigin;
  11. else tmpImg = imgLstTarget;
  12. Size imageSize = tmpImg.ImageSize;
  13.  
  14. Font fn = cbo.Font;
  15. var s = (KeyValuePair<string, string>)cbo.Items[e.Index];//这里要求外面给cbo赋值时绑定List<KeyValuePair<string, string>>
  16. StringFormat sf = new StringFormat();
  17. sf.Alignment = StringAlignment.Near;
  18. if (e.State == (DrawItemState.NoAccelerator | DrawItemState.NoFocusRect))
  19. {
  20. //画条目背景
  21. e.Graphics.FillRectangle(new SolidBrush(Color.White), r);//没有选中时背景为白色
  22. //绘制图像
  23. tmpImg.Draw(e.Graphics, r.Left, r.Top, e.Index);
  24. //显示字符串
  25. e.Graphics.DrawString(s.Value, fn, new SolidBrush(Color.Black), r.Left + imageSize.Width, r.Top);
  26. //显示取得焦点时的虚线框
  27. e.DrawFocusRectangle();
  28. }
  29. else
  30. {
  31. e.Graphics.FillRectangle(new SolidBrush(Color.LightBlue), r);//选中背景为浅灰
  32. tmpImg.Draw(e.Graphics, r.Left, r.Top, e.Index);
  33. e.Graphics.DrawString(s.Value, fn, new SolidBrush(Color.Black), r.Left + imageSize.Width, r.Top);
  34. e.DrawFocusRectangle();
  35. }
  36. }

配合图文,给comboBox和ImageList添加内容

  1. void FillCbo(ComboBox cbo, ImageList img, IEnumerable<string> strLst)
  2. {
  3. img.Images.Clear();
  4. cbo.Items.Clear();
  5.  
  6. Action<string> addItem = shortName =>
  7. {
  8. var bmp = GetPicFromName(shortName);
  9. img.Images.Add(bmp);
  10. cbo.Items.Add(new KeyValuePair<string, string>(shortName, string.Format("{0}({1})", DisplayText, shortName)));
  11. };
  12. foreach (var item in strLst)
  13. addItem(item);
  14. }

另外,还需要修改comboBox的属性:

  1. cbo.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
  2. cbo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;

还有一个问题值得留意。本来在程序的处理代码里面我将Drawmode设置成OwnerDrawFixed,但是由于列项很多,有100多项,设置成这个选项之后,MaxDropDownItems=8失效了,后来改成OwnDrawVariable就可以了。两者相较,后者的灵活空间应该更大,可以手动调整的范围更广,对技术的要求也更高。

c# comboBox输出图文效果的更多相关文章

  1. EasyUI 通过 Combobox 实现 AutoComplete 效果

    朋友在做一个web程序,用的EasyUI框架,让我帮忙实现一个自动提示功能.由于之前我也没用过EasyUI框架,就想到了jQueryUI有 AutoComplete 插件,就想直接拿过来用. 但当我将 ...

  2. 网页“console”输出图文信息

    http://www.monmonkey.com/javascript/jiben2.html 参考以上链接中的转义字符使用. http://www.cnblogs.com/Wayou/p/chrom ...

  3. c 按输入的字母来输出对应效果

    输入一个大写字母,如 F,输出 比如: 输入:F 输出: F EFE DEFED CDEFEDC BCDEFEDCB ABCDEFEDCBA #include<stdio.h> int m ...

  4. 用Response对象的write方法和<%%>及<%=%>输出同样效果的乘法表格

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Response1.aspx ...

  5. PHP中如何实现 “在页面中一边执行一边输出” 的效果

    <?php    set_time_limit(0);  //在有关数据库的大量数据的时候,可以将其设置为0,表示无限制.    ob_end_clean();     //在循环输出前,要关闭 ...

  6. python 全栈开发,Day126(创业故事,软件部需求,内容采集,显示内容图文列表,MongoDB数据导入导出JSON)

    作业讲解 下载代码: HBuilder APP和flask后端登录 链接:https://pan.baidu.com/s/1eBwd1sVXTNLdHwKRM2-ytg 密码:4pcw 如何打开APP ...

  7. vs2013+MVC3.0+EasyUI的ComboBox联动使用(二)

     vs2013+MVC3.0+EasyUI的ComboBox联动使用(二) 简单介绍:在vs2013(.net4.0)中使用MVC3.0对于EasyUI中ComboBox的联动使用. 载入Comb ...

  8. 软件部需求,内容采集,显示内容图文列表,MongoDB数据导入导出JSON

    全局变量 由于多个html页面,需要引用同一个变量.这个时候,需要定义一个全局变量!如何定义呢? 默认包含了mui的html文件都导入mui.js文件.那么将变量写在mui.js中,就可以实现所有页面 ...

  9. Android图文混排-实现EditText图文混合插入上传

    前段时间做了一个Android会议管理系统,项目需求涉及到EditText的图文混排,如图: 在上图的"会议详情"中.须要支持文本和图片的混合插入,下图演示输入的演示样例: 当会议 ...

随机推荐

  1. 【转】UML类图符号 6种关系说明以及举例

    转自http://www.cnblogs.com/duanxz/archive/2012/06/13/2547801.html UML中描述对象和类之间相互关系的方式包括:依赖(Dependency) ...

  2. Java 利用 poi 生成 Excel文件的通用例子

    在用java 写数据库应用的时候, 通常会生成各种报表,而这些报表可能会被导出为各种格式的文件,比如Excel文档,pdf 文档等等. 今天先做了一个生成Excel 文档的例子,主要解决以下问题: 生 ...

  3. Macos mysql 8.0.11 添加配置文件

    mac 安装mysql 后,没有配置文件,如果需要添加配置文件,需要在/etc 目录下面添加 my.cnf 文件. 添加方法 打开文件命令:sudo vi  /etc/my.cnf 文件添加内容: [ ...

  4. FIR仿真module_04

    作者:桂. 时间:2018-02-06  12:10:14 链接:http://www.cnblogs.com/xingshansi/p/8421001.html 前言 本文主要记录基本的FIR实现, ...

  5. MySQL 死锁与日志二三事

    最近线上 MySQL 接连发生了几起数据异常,都是在凌晨爆发,由于业务场景属于典型的数据仓库型应用,白天压力较小无法复现.甚至有些异常还比较诡异,最后 root cause 分析颇费周折.那实际业务当 ...

  6. unity, ios skin crash

    https://issuetracker.unity3d.com/issues/ios-loading-models-with-tangents-set-to-calculate-legacy-fro ...

  7. activiti主要API对象

    ProcessEngine         //流程引擎 RuntimeService      //与流程实例,执行对象(正在执行) TaskService           //正在执行任务 H ...

  8. Oozie工作流属性配置的方式与策略

    本文原文出处: http://blog.csdn.net/bluishglc/article/details/46049817 Oozie工作流属性配置的三种方式 Oozie有三种方法可以给工作流提供 ...

  9. 快速开方法(c语言)译文

    人们最早就在Quake3源代码中发现了类似如下的C代码,它可以快速的求1/sqrt(x),在3D图形向量计算方面应用很广. float invSqrt(float x) { float xhalf = ...

  10. 基于Xilinx Zynq Z7045 SoC的CNN的视觉识别应用

    基于Xilinx Zynq Z7045 SoC的CNN的视觉识别应用 由 judyzhong 于 星期三, 08/16/2017 - 14:56 发表 作者:stark 近些年来随着科学技术的不断进步 ...