开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 6521|回复: 21
收起左侧

[C#图文教程] [C#] 简单自绘带图片的 ComboBox

[复制链接]
发表于 2012-7-21 14:44:04 | 显示全部楼层 |阅读模式   重庆市重庆市
本帖最后由 isaced 于 2012-7-21 14:56 编辑

很高兴看到精益论坛的C#板块慢慢活跃起来,希望大家可以更多的分享处自己的东西和经验。

这是一篇C#自绘控件的教程,抛砖引玉,很简单,技术含量不高,大师请路过。{:soso_e100:}

完了大家可以自己试试,帖子源码和素材都贴上来,欢迎跟帖交流。


发到CSDN论坛上,瞬间被首页推荐了。
csdn.jpg

效果展示:

0.jpg 2.jpg 1.jpg


不废话了,正文开始。

先构造一个子项的类:
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Drawing;//

  6. namespace ComboBox_Draw
  7. {
  8.     //自定义组合框项
  9.     class MyItem
  10.     {
  11.         //项文本内容
  12.         private String Text;
  13.       
  14.         //项图片
  15.         public Image Img;

  16.         //构造函数
  17.         public MyItem(String text, Image img)
  18.         {
  19.             Text = text;
  20.             Img = img;
  21.         }

  22.         //重写ToString函数,返回项文本
  23.         public override string ToString()
  24.         {
  25.             return Text;
  26.         }
  27.     }
  28. }
复制代码
然后看重写DrawItem事件:
  1. private void ComboBox1_DrawItem(object sender, DrawItemEventArgs e)
  2.         {
  3.             //鼠标选中在这个项上
  4.             if ((e.State & DrawItemState.Selected) != 0)
  5.             {
  6.                 //渐变画刷
  7.                 LinearGradientBrush brush = new LinearGradientBrush(e.Bounds, Color.FromArgb(255, 251, 237),
  8.                                                  Color.FromArgb(255, 236, 181), LinearGradientMode.Vertical);
  9.                 //填充区域
  10.                 Rectangle borderRect = new Rectangle(3, e.Bounds.Y, e.Bounds.Width - 5, e.Bounds.Height - 2);

  11.                 e.Graphics.FillRectangle(brush, borderRect);

  12.                 //画边框
  13.                 Pen pen = new Pen(Color.FromArgb(229, 195, 101));
  14.                 e.Graphics.DrawRectangle(pen, borderRect);
  15.             }
  16.             else
  17.             {
  18.                 SolidBrush brush = new SolidBrush(Color.FromArgb(255, 255, 255));
  19.                 e.Graphics.FillRectangle(brush, e.Bounds);
  20.             }

  21.             //获得项图片,绘制图片
  22.             MyItem item = (MyItem)comboBox1.Items[e.Index];
  23.             Image img = item.Img;
  24.            
  25.             //图片绘制的区域
  26.             Rectangle imgRect = new Rectangle(6, e.Bounds.Y + 3, 45,45);
  27.             e.Graphics.DrawImage(img, imgRect);
  28.             
  29.             //文本内容显示区域
  30.             Rectangle textRect =
  31.                     new Rectangle(imgRect.Right + 2, imgRect.Y, e.Bounds.Width - imgRect.Width, e.Bounds.Height - 2);
  32.             
  33.             //获得项文本内容,绘制文本
  34.             String itemText = comboBox1.Items[e.Index].ToString();

  35.             //文本格式垂直居中
  36.             StringFormat strFormat = new StringFormat();
  37.             strFormat.LineAlignment = StringAlignment.Center;
  38.             e.Graphics.DrawString(itemText, new Font("微软雅黑", 12), Brushes.Black, textRect, strFormat);
  39.         }
复制代码
最后是窗体Load事件:最后是窗体Load事件:
  1.        private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.             //添加项
  4.             comboBox1.Items.Add(new MyItem("000000", Image.FromFile(Application.StartupPath + "\\0.gif")));
  5.             comboBox1.Items.Add(new MyItem("111111", Image.FromFile(Application.StartupPath + "\\1.gif")));
  6.             comboBox1.Items.Add(new MyItem("222222", Image.FromFile(Application.StartupPath + "\\2.gif")));
  7.             comboBox1.Items.Add(new MyItem("333333", Image.FromFile(Application.StartupPath + "\\3.gif")));

  8.             //默认选中项索引
  9.             comboBox1.SelectedIndex = 0;

  10.             //自绘组合框需要设置的一些属性
  11.             comboBox1.DrawMode = DrawMode.OwnerDrawFixed;
  12.             comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
  13.             comboBox1.ItemHeight = 50;
  14.             comboBox1.Width = 200;

  15.             //添加DrawItem事件处理函数
  16.             comboBox1.DrawItem += ComboBox1_DrawItem;

  17.         }
复制代码
素材下载

---------------------------------------------------------------------------------------------------

0.gif 1.gif 2.gif 3.gif

---------------------------------------------------------------------------------------------------


{:soso_e183:}祝精益论坛越来越来越来越来越来越来好!{:soso_e183:}





另外,本人倡导注释,所以注释量比较大,方便新手。
对本文有什么问题可以直接回帖,也可以发到我的邮箱:isaced@163.com

[控件自绘]简单自绘带图片的ComboBox.zip

274.39 KB, 下载次数: 46, 下载积分: 精币 -2 枚

为了满足连代码都懒得Copy的人们,源码打包下载。

评分

参与人数 1好评 +1 精币 +3 收起 理由
乔伊 + 1 + 3 精彩文章希望继续努力

查看全部评分

发表于 2012-7-21 14:53:45 | 显示全部楼层   浙江省杭州市
这个我喜欢。

评分

参与人数 1精币 +1 收起 理由
isaced + 1 谢谢支持!

查看全部评分

回复 支持 反对

使用道具 举报

发表于 2012-7-21 14:56:25 | 显示全部楼层   浙江省杭州市
转载主题就不要把原创复制过来了,改成转载
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-21 14:57:57 | 显示全部楼层   重庆市重庆市
乔伊 发表于 2012-7-21 14:56
转载主题就不要把原创复制过来了,改成转载

知道了,下次直接发精益论坛。
回复 支持 反对

使用道具 举报

发表于 2012-7-21 14:58:29 | 显示全部楼层   浙江省杭州市
isaced 发表于 2012-7-21 14:57
知道了,下次直接发精益论坛。

。。。。。= =。。。好好学习,天天向上
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-21 14:59:28 | 显示全部楼层   重庆市重庆市
乔伊 发表于 2012-7-21 14:58
。。。。。= =。。。好好学习,天天向上

可惜论坛没有代码高亮插件,遗憾了。
回复 支持 反对

使用道具 举报

发表于 2012-7-21 15:00:16 | 显示全部楼层   浙江省杭州市
isaced 发表于 2012-7-21 14:59
可惜论坛没有代码高亮插件,遗憾了。

嗯的,我看你代码是有背景格式的,这个是用HTML还是DZ代码?代码高亮在弄了,不过不是很完善。所以木有发布。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-21 15:03:16 | 显示全部楼层   重庆市重庆市
乔伊 发表于 2012-7-21 15:00
嗯的,我看你代码是有背景格式的,这个是用HTML还是DZ代码?代码高亮在弄了,不过不是很完善。所以木有发 ...

VS里直接Copy的,然后粘贴为代码。
回复 支持 反对

使用道具 举报

发表于 2012-7-21 15:06:15 | 显示全部楼层   浙江省杭州市
isaced 发表于 2012-7-21 15:03
VS里直接Copy的,然后粘贴为代码。

粘贴为代码?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-21 15:12:42 | 显示全部楼层   重庆市重庆市
乔伊 发表于 2012-7-21 15:06
粘贴为代码?

1.jpg
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表