新建一个winform项目,拖一个ListBox控件listBox1

  1. public Form1()
  2. {
  3. InitializeComponent();
  4. listBox1.DrawMode = DrawMode.OwnerDrawFixed;
  5. }

首先需要设置DrawMode为DrawMode.OwnerDrawFixed 或 DrawMode.OwnerDrawVariable 时,才触发该事件(DrawItem事件).,也可以通过设计器在属性面板里设置哈。

  1. private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
  2. {
  3. e.DrawBackground();//绘制背景
  4. Brush myBrush = Brushes.Black;
  5. switch (e.Index)
  6. {
  7. case 0:
  8. myBrush = Brushes.Red;
  9. break;
  10. case 1:
  11. myBrush = Brushes.Orange;
  12. break;
  13. case 2:
  14. myBrush = Brushes.Purple;
  15. break;
  16. }
  17. e.DrawFocusRectangle();//焦点框
  18. //文本
  19. e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, myBrush, e.Bounds, StringFormat.GenericDefault);
  20. }

这是采用附加委托的方式处理,可以查看设计器产生的代码:

  1. this.listBox1.DrawItem += new System.Windows.Forms.DrawItemEventHandler(this.listBox1_DrawItem);

事件由ListBox触发.

下面,再举一反三下,实现交替颜色的列表框:

  1. public partial class Form1 : Form
  2. {
  3. private Color RowBackColorAlt=Color.FromArgb(200,200,200);//交替色
  4. private Color RowBackColorSel = Color.FromArgb(150, 200, 250);//选择项目颜色
  5. public Form1()
  6. {
  7. InitializeComponent();
  8. listBox1.DrawMode = DrawMode.OwnerDrawFixed;
  9. }
  10. private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
  11. {
  12. Brush myBrush = Brushes.Black;
  13. if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
  14. {
  15. myBrush = new SolidBrush(RowBackColorSel);
  16. }
  17. else if (e.Index % 2 == 0)
  18. {
  19. myBrush = new SolidBrush(RowBackColorAlt);
  20. }
  21. else
  22. {
  23. myBrush = new SolidBrush(Color.White);
  24. }
  25. e.Graphics.FillRectangle(myBrush, e.Bounds);
  26. e.DrawFocusRectangle();//焦点框
  27. //文本
  28. e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, Brushes.Black, e.Bounds, StringFormat.GenericDefault);
  29. }
  30. }

上图:

接下来,设置ItemHeight,每一项的高度:

  1. public Form1()
  2. {
  3. InitializeComponent();
  4. listBox1.DrawMode = DrawMode.OwnerDrawFixed;
  5. listBox1.ItemHeight = 24;
  6. }

文字,剧中:

  1. //文本
  2. StringFormat strFormat = new StringFormat();
  3. strFormat.Alignment = StringAlignment.Center;
  4. strFormat.LineAlignment = StringAlignment.Center;
  5. e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, Brushes.Black, e.Bounds,strFormat);

上图片:

下面看看MeasureItem 事件:

仅当 DrawMode 属性被设置为 OwnerDrawVariable 时,才引发该事件。

  1. public partial class Form1 : Form
  2. {
  3. private Color RowBackColorAlt=Color.FromArgb(200,200,200);//交替色
  4. private Color RowBackColorSel = Color.FromArgb(150, 200, 250);//选择项目颜色
  5. public Form1()
  6. {
  7. InitializeComponent();
  8. listBox1.DrawMode = DrawMode.OwnerDrawVariable;
  9. }
  10. private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
  11. {
  12. Brush myBrush = Brushes.Black;
  13. if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
  14. {
  15. myBrush = new SolidBrush(RowBackColorSel);
  16. }
  17. else if (e.Index % 2 == 0)
  18. {
  19. myBrush = new SolidBrush(RowBackColorAlt);
  20. }
  21. else
  22. {
  23. myBrush = new SolidBrush(Color.White);
  24. }
  25. e.Graphics.FillRectangle(myBrush, e.Bounds);
  26. e.DrawFocusRectangle();//焦点框
  27. //文本
  28. StringFormat strFormat = new StringFormat();
  29. strFormat.Alignment = StringAlignment.Center;
  30. strFormat.LineAlignment = StringAlignment.Center;
  31. e.Graphics.DrawString(listBox1.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds,strFormat);
  32. }
  33. private void listBox1_MeasureItem(object sender, MeasureItemEventArgs e)
  34. {
  35. e.ItemHeight = (1+e.Index)*12;
  36. }
  37. }

本文转自 xcf007 51CTO博客,原文链接:http://blog.51cto.com/xcf007/429339,如需转载请自行联系原作者

C# Winform编程ListBox之DrawItem事件相关推荐

  1. C# Winform编程ListBox之添加图标

    先上图: 这里添加固定的图片的. 代码: private Color RowBackColorAlt=Color.FromArgb(200,200,200);//交替色 private Color R ...

  2. WinForm编程数据视图之DataGridView浅析

    学习C#语言的朋友们肯定或多或少地接触到了WinForm编程,在C#语言的可视化IDE中(如VS.NET中)使用设计器可以让我们轻松地完成窗体.按钮.标签.图片框等等控件的组合,我们可以轻易地做出界面 ...

  3. C# Winform编程自学笔记(一)

    内容简介 因为毕业设计要用到,所以计划用一个月的时间自学Winform编程 (2020/3/20-2020/4/17),以下是我的自学笔记,需要的朋友们请自提: 使用教材:<C#Winform实 ...

  4. Winform编程中的treeview控件

    Winform编程中的treeview控件 treeview基础操作 treeview添加.删除节点操作 treeview节点展开与折叠 treeview节点重命名 treeview获取节点集合并设置 ...

  5. 怎样正确处理WinForm中Listview的ItemCheck事件

    我很少写具体的对象应用心得,这次尝试一下. WinForm中Listview的ItemCheck事件,例子如下:   private void lvwTables_ItemCheck(object s ...

  6. WinForm编程细节

    原作者:黄启清(www.cnblogs.com/happyqq) 日期:2008-4-19 这是我在Cnblogs里面的第一篇原创文章,以前在百度贴吧里面写的都是网络安全方面的文章. 希望Cnblog ...

  7. [转] C# Winform 拦截关闭按钮触发的事件

    原文 C# Winform 拦截关闭按钮触发的事件 用户关闭软件时,软件一般会给"是否确认关闭"的提示. 通常,我们把它写在FormClosing 事件中,如果确定关闭,就关闭:否 ...

  8. 【WPF】ListBox嵌套与事件冒泡

    [WPF]ListBox嵌套与事件冒泡 原文:[WPF]ListBox嵌套与事件冒泡 问题:两个ListBox嵌套后,当鼠标位于内部ListBox上,鼠标滚轮事件会被内部ListBox接收,导致外层L ...

  9. java事件绑定,Java编程GUI中的事件绑定代码示例

    程序绑定的概念: 绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来.对java来说,绑定分为静态绑定和动态绑定:或者叫做前期绑定和后期绑定 静态绑定: 在程序执行前方法已经被绑定,此时由编译 ...

最新文章

  1. 云计算时代的数据库运行
  2. 2840页的计算机毕业论文,德州奥斯汀华人博士究竟写了啥
  3. spring websocket Converters must not be empty
  4. 批处理 正则表达式(findstr) 整理
  5. MOSS 2010 实现域账户 组员在线交流 Live Chat
  6. 方立勋_30天掌握JavaWeb_div和css基础
  7. 工业级光纤收发器入网说明
  8. 5位数的数字黑洞是多少_每日一题[491]数字黑洞--Kaprekar常数
  9. SpringCloud学习笔记029---在SpringCloud项目中使用Zuul实现基本的网关统一处理
  10. SonarQube安装步骤 Windows10系统
  11. Uva 1471 Defense Lines(LIS变形)
  12. 戴尔服务器720dx格式化硬盘,戴尔首个基于 Ocarina 的解决方案--DX6000G 存储压缩节点...
  13. CM android rom,华为5X CM 12.1 Android ROM刷机包下载安装教程
  14. 河南自考本科英语可用计算机代替,河南自考选考2至3门专业课可代替英语课程...
  15. mongodb-b站黑马程序员
  16. ios触摸精灵_ios触摸绘图
  17. EndNote仅修改一处引文格式为作者(年代)即Author(Date)的方法
  18. java上位机开发(编译和部署)
  19. Python可视化案例:Mutual Funds和ETFs对比
  20. 《策略驱动型数据中心——ACI技术详解》——1.3 数据中心设计

热门文章

  1. V-rep学习笔记:机器人逆运动学数值解法(Damped Least Squares / Levenberg-Marquardt Method)...
  2. 2101 Problem A Snake Filled
  3. IOS MenuController的部分操作
  4. PHP 字符串匹配算法 Sunday算法
  5. DB2 9 运用开拓(733 测验)认证指南,第 4 部门: 嵌入式 SQL 编程(4)
  6. 今天心情好,发首我喜欢的歌---天黑黑
  7. 数据结构上机实践第11周项目2 - 操作用邻接表存储的图
  8. 【计算机视觉-从入门到精通系列】 第三章 立体匹配
  9. python中文字体奇怪_利用python检查 AS400的中文字问题
  10. php smarty ci,CI整合Smarty,cismarty_PHP教程