|
本帖最后由 isaced 于 2012-7-21 14:56 编辑
很高兴看到精益论坛的C#板块慢慢活跃起来,希望大家可以更多的分享处自己的东西和经验。
这是一篇C#自绘控件的教程,抛砖引玉,很简单,技术含量不高,大师请路过。{:soso_e100:}
完了大家可以自己试试,帖子源码和素材都贴上来,欢迎跟帖交流。
发到CSDN论坛上,瞬间被首页推荐了。
效果展示:
不废话了,正文开始。
先构造一个子项的类:- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Drawing;//
- namespace ComboBox_Draw
- {
- //自定义组合框项
- class MyItem
- {
- //项文本内容
- private String Text;
-
- //项图片
- public Image Img;
- //构造函数
- public MyItem(String text, Image img)
- {
- Text = text;
- Img = img;
- }
- //重写ToString函数,返回项文本
- public override string ToString()
- {
- return Text;
- }
- }
- }
复制代码 然后看重写DrawItem事件:- private void ComboBox1_DrawItem(object sender, DrawItemEventArgs e)
- {
- //鼠标选中在这个项上
- if ((e.State & DrawItemState.Selected) != 0)
- {
- //渐变画刷
- LinearGradientBrush brush = new LinearGradientBrush(e.Bounds, Color.FromArgb(255, 251, 237),
- Color.FromArgb(255, 236, 181), LinearGradientMode.Vertical);
- //填充区域
- Rectangle borderRect = new Rectangle(3, e.Bounds.Y, e.Bounds.Width - 5, e.Bounds.Height - 2);
- e.Graphics.FillRectangle(brush, borderRect);
- //画边框
- Pen pen = new Pen(Color.FromArgb(229, 195, 101));
- e.Graphics.DrawRectangle(pen, borderRect);
- }
- else
- {
- SolidBrush brush = new SolidBrush(Color.FromArgb(255, 255, 255));
- e.Graphics.FillRectangle(brush, e.Bounds);
- }
- //获得项图片,绘制图片
- MyItem item = (MyItem)comboBox1.Items[e.Index];
- Image img = item.Img;
-
- //图片绘制的区域
- Rectangle imgRect = new Rectangle(6, e.Bounds.Y + 3, 45,45);
- e.Graphics.DrawImage(img, imgRect);
-
- //文本内容显示区域
- Rectangle textRect =
- new Rectangle(imgRect.Right + 2, imgRect.Y, e.Bounds.Width - imgRect.Width, e.Bounds.Height - 2);
-
- //获得项文本内容,绘制文本
- String itemText = comboBox1.Items[e.Index].ToString();
- //文本格式垂直居中
- StringFormat strFormat = new StringFormat();
- strFormat.LineAlignment = StringAlignment.Center;
- e.Graphics.DrawString(itemText, new Font("微软雅黑", 12), Brushes.Black, textRect, strFormat);
- }
复制代码 最后是窗体Load事件:最后是窗体Load事件:- private void Form1_Load(object sender, EventArgs e)
- {
- //添加项
- comboBox1.Items.Add(new MyItem("000000", Image.FromFile(Application.StartupPath + "\\0.gif")));
- comboBox1.Items.Add(new MyItem("111111", Image.FromFile(Application.StartupPath + "\\1.gif")));
- comboBox1.Items.Add(new MyItem("222222", Image.FromFile(Application.StartupPath + "\\2.gif")));
- comboBox1.Items.Add(new MyItem("333333", Image.FromFile(Application.StartupPath + "\\3.gif")));
- //默认选中项索引
- comboBox1.SelectedIndex = 0;
- //自绘组合框需要设置的一些属性
- comboBox1.DrawMode = DrawMode.OwnerDrawFixed;
- comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
- comboBox1.ItemHeight = 50;
- comboBox1.Width = 200;
- //添加DrawItem事件处理函数
- comboBox1.DrawItem += ComboBox1_DrawItem;
- }
复制代码素材下载
---------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------
{:soso_e183:}祝精益论坛越来越来越来越来越来越来好!{:soso_e183:}
另外,本人倡导注释,所以注释量比较大,方便新手。
对本文有什么问题可以直接回帖,也可以发到我的邮箱:isaced@163.com
|
评分
-
查看全部评分
|