C# Winform编程ListBox之DrawItem事件
新建一个winform项目,拖一个ListBox控件listBox1
- public Form1()
- {
- InitializeComponent();
- listBox1.DrawMode = DrawMode.OwnerDrawFixed;
- }
首先需要设置DrawMode为DrawMode.OwnerDrawFixed 或 DrawMode.OwnerDrawVariable 时,才触发该事件(DrawItem事件).,也可以通过设计器在属性面板里设置哈。
- private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
- {
- e.DrawBackground();//绘制背景
- Brush myBrush = Brushes.Black;
- switch (e.Index)
- {
- case 0:
- myBrush = Brushes.Red;
- break;
- case 1:
- myBrush = Brushes.Orange;
- break;
- case 2:
- myBrush = Brushes.Purple;
- break;
- }
- e.DrawFocusRectangle();//焦点框
- //文本
- e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, myBrush, e.Bounds, StringFormat.GenericDefault);
- }
这是采用附加委托的方式处理,可以查看设计器产生的代码:
- this.listBox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBox1_DrawItem);
事件由ListBox触发.
下面,再举一反三下,实现交替颜色的列表框:
- public partial class Form1 : Form
- {
- private Color RowBackColorAlt=Color.FromArgb(200,200,200);//交替色
- private Color RowBackColorSel = Color.FromArgb(150, 200, 250);//选择项目颜色
- public Form1()
- {
- InitializeComponent();
- listBox1.DrawMode = DrawMode.OwnerDrawFixed;
- }
- private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
- {
- Brush myBrush = Brushes.Black;
- if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
- {
- myBrush = new SolidBrush(RowBackColorSel);
- }
- else if (e.Index % 2 == 0)
- {
- myBrush = new SolidBrush(RowBackColorAlt);
- }
- else
- {
- myBrush = new SolidBrush(Color.White);
- }
- e.Graphics.FillRectangle(myBrush, e.Bounds);
- e.DrawFocusRectangle();//焦点框
- //文本
- e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, Brushes.Black, e.Bounds, StringFormat.GenericDefault);
- }
- }
上图:
接下来,设置ItemHeight,每一项的高度:
- public Form1()
- {
- InitializeComponent();
- listBox1.DrawMode = DrawMode.OwnerDrawFixed;
- listBox1.ItemHeight = 24;
- }
文字,剧中:
- //文本
- StringFormat strFormat = new StringFormat();
- strFormat.Alignment = StringAlignment.Center;
- strFormat.LineAlignment = StringAlignment.Center;
- e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, Brushes.Black, e.Bounds,strFormat);
上图片:
下面看看MeasureItem 事件:
仅当 DrawMode 属性被设置为 OwnerDrawVariable 时,才引发该事件。
- public partial class Form1 : Form
- {
- private Color RowBackColorAlt=Color.FromArgb(200,200,200);//交替色
- private Color RowBackColorSel = Color.FromArgb(150, 200, 250);//选择项目颜色
- public Form1()
- {
- InitializeComponent();
- listBox1.DrawMode = DrawMode.OwnerDrawVariable;
- }
- private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
- {
- Brush myBrush = Brushes.Black;
- if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
- {
- myBrush = new SolidBrush(RowBackColorSel);
- }
- else if (e.Index % 2 == 0)
- {
- myBrush = new SolidBrush(RowBackColorAlt);
- }
- else
- {
- myBrush = new SolidBrush(Color.White);
- }
- e.Graphics.FillRectangle(myBrush, e.Bounds);
- e.DrawFocusRectangle();//焦点框
- //文本
- StringFormat strFormat = new StringFormat();
- strFormat.Alignment = StringAlignment.Center;
- strFormat.LineAlignment = StringAlignment.Center;
- e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds,strFormat);
- }
- private void listBox1_MeasureItem(object sender, MeasureItemEventArgs e)
- {
- e.ItemHeight = (1+e.Index)*12;
- }
- }
本文转自 xcf007 51CTO博客,原文链接:http://blog.51cto.com/xcf007/429339,如需转载请自行联系原作者
C# Winform编程ListBox之DrawItem事件相关推荐
- C# Winform编程ListBox之添加图标
先上图: 这里添加固定的图片的. 代码: private Color RowBackColorAlt=Color.FromArgb(200,200,200);//交替色 private Color R ...
- WinForm编程数据视图之DataGridView浅析
学习C#语言的朋友们肯定或多或少地接触到了WinForm编程,在C#语言的可视化IDE中(如VS.NET中)使用设计器可以让我们轻松地完成窗体.按钮.标签.图片框等等控件的组合,我们可以轻易地做出界面 ...
- C# Winform编程自学笔记(一)
内容简介 因为毕业设计要用到,所以计划用一个月的时间自学Winform编程 (2020/3/20-2020/4/17),以下是我的自学笔记,需要的朋友们请自提: 使用教材:<C#Winform实 ...
- Winform编程中的treeview控件
Winform编程中的treeview控件 treeview基础操作 treeview添加.删除节点操作 treeview节点展开与折叠 treeview节点重命名 treeview获取节点集合并设置 ...
- 怎样正确处理WinForm中Listview的ItemCheck事件
我很少写具体的对象应用心得,这次尝试一下. WinForm中Listview的ItemCheck事件,例子如下: private void lvwTables_ItemCheck(object s ...
- WinForm编程细节
原作者:黄启清(www.cnblogs.com/happyqq) 日期:2008-4-19 这是我在Cnblogs里面的第一篇原创文章,以前在百度贴吧里面写的都是网络安全方面的文章. 希望Cnblog ...
- [转] C# Winform 拦截关闭按钮触发的事件
原文 C# Winform 拦截关闭按钮触发的事件 用户关闭软件时,软件一般会给"是否确认关闭"的提示. 通常,我们把它写在FormClosing 事件中,如果确定关闭,就关闭:否 ...
- 【WPF】ListBox嵌套与事件冒泡
[WPF]ListBox嵌套与事件冒泡 原文:[WPF]ListBox嵌套与事件冒泡 问题:两个ListBox嵌套后,当鼠标位于内部ListBox上,鼠标滚轮事件会被内部ListBox接收,导致外层L ...
- java事件绑定,Java编程GUI中的事件绑定代码示例
程序绑定的概念: 绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来.对java来说,绑定分为静态绑定和动态绑定:或者叫做前期绑定和后期绑定 静态绑定: 在程序执行前方法已经被绑定,此时由编译 ...
最新文章
- 云计算时代的数据库运行
- 2840页的计算机毕业论文,德州奥斯汀华人博士究竟写了啥
- spring websocket Converters must not be empty
- 批处理 正则表达式(findstr) 整理
- MOSS 2010 实现域账户 组员在线交流 Live Chat
- 方立勋_30天掌握JavaWeb_div和css基础
- 工业级光纤收发器入网说明
- 5位数的数字黑洞是多少_每日一题[491]数字黑洞--Kaprekar常数
- SpringCloud学习笔记029---在SpringCloud项目中使用Zuul实现基本的网关统一处理
- SonarQube安装步骤 Windows10系统
- Uva 1471 Defense Lines(LIS变形)
- 戴尔服务器720dx格式化硬盘,戴尔首个基于 Ocarina 的解决方案--DX6000G 存储压缩节点...
- CM android rom,华为5X CM 12.1 Android ROM刷机包下载安装教程
- 河南自考本科英语可用计算机代替,河南自考选考2至3门专业课可代替英语课程...
- mongodb-b站黑马程序员
- ios触摸精灵_ios触摸绘图
- EndNote仅修改一处引文格式为作者(年代)即Author(Date)的方法
- java上位机开发(编译和部署)
- Python可视化案例:Mutual Funds和ETFs对比
- 《策略驱动型数据中心——ACI技术详解》——1.3 数据中心设计
热门文章
- V-rep学习笔记:机器人逆运动学数值解法(Damped Least Squares / Levenberg-Marquardt Method)...
- 2101 Problem A Snake Filled
- IOS MenuController的部分操作
- PHP 字符串匹配算法 Sunday算法
- DB2 9 运用开拓(733 测验)认证指南,第 4 部门: 嵌入式 SQL 编程(4)
- 今天心情好,发首我喜欢的歌---天黑黑
- 数据结构上机实践第11周项目2 - 操作用邻接表存储的图
- 【计算机视觉-从入门到精通系列】 第三章 立体匹配
- python中文字体奇怪_利用python检查 AS400的中文字问题
- php smarty ci,CI整合Smarty,cismarty_PHP教程