知识大全 C#设计带图标和自定义颜色的ListBox
Posted 知
篇首语:采得百花成蜜后,为谁辛苦为谁甜。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#设计带图标和自定义颜色的ListBox相关的知识,希望对你有一定的参考价值。
C#设计带图标和自定义颜色的ListBox 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
在一个点对点文件传输的项目中 我需要显示文件传输的实时信息 传输的文件列表和当前传输的文件 当时我想到了用ListBox 但是但我用了ListBox后 我发现它不能改变控件中文本想的颜色 于是我就想扩展一下ListBox控件 ListBoxEx
我的目标是给空间加上图标 还要能时时改变控件文本颜色 于是从ListBox派生类
public class ListBoxEx : ListBox …
为了操作方便我为ListBoxEx的每一项设计专门的类ListBoxExItem
public class ListBoxExItem …
为了保持我这个控件与WinForm的标准控件的操作借口一致 我又重新设计了两个集合类:
public class ListBoxExItemCollection : IList ICollection IEnumerator //这个类相对于标准ListBox中的ObjectCollection 这个类作为ListBoxEx中的Items属性的类型
public class SelectedListBoxExItemCollection : : IList ICollection IEnumerator//这个类相对于标准ListBox中的SelectedObjectCollection 这个类作为ListBoxEx中的SelectedItems属性的类型
下面看两个集合类的实现
ListBoxExItemCollection的实现 为了做到对集合(Items)的操作能够及时反映到ListBoxEx的控件中所以 此类只是对ListBox中Items(ObjectCollection类型)作了一层包装 就是把ListBox中Items属性的所有方法的只要是object类型的参数都转换成ListBoxExItem 比如:
public void Remove(ListBoxExItem item) this _Items Remove(item); //_Items为ObjectCollection类型
public void Insert(int index ListBoxExItem item) this _Items Insert(index item);
public int Add(ListBoxExItem item) return this _Items Add(item);
由上可知 ListBoxExItemCollection中有一个构造函数来传递ListBox中的Items对象
private ObjectCollection _Items;
public ListBoxExItemCollection(ObjectCollection baseItems) this _Items = baseItems;
而SelectedListBoxExItemCollection类的实现也用同样的方法 只不过是对SelectedObjectCollection包装罢了
集合实现后 再来看ListBoxExItem的实现
为了使它支持图标和多种颜色添加如下成员
private int _ImageIndex;
public int ImageIndex get return this _ImageIndex; set this _ImageIndex = value;
private Color _ForeColor;
public Color ForeColor get return this _ForeColor; set this _ForeColor = value; this Parent Invalidate();
当然还有
private string _Text;
public string Text get return this _Text; set this _Text = value;
为了控件能正确显示此项的文本 还必须重写ToString()方法
public override string ToString() return this _Text;
再看ListBoxEx的实现:
为了使控件能够自我绘制 所以 DrawMode = DrawMode OwnerDrawFixed;
为了覆蓋基类的Items等相关属性添加
private ListBoxExItemCollection _Items; //在构造函数中创建
同时还需要重写属性Items
new public ListBoxExItemCollection Items get return this _Items;
new public ListBoxExItem SelectedItem //强制转换为ListBoxExItem get return base SelectedItem as ListBoxExItem; set base SelectedItem = value;
new public SelectedListBoxExItemCollection SelectedItems //重新包装SelectedItems get return new SelectedListBoxExItemCollection(base SelectedItems);
为了支持图标 添加一个图像列表imagelist
private ImageList imageList;
public ImageList ImageList get return this imageList; set this imageList = value; this Invalidate();//图像列表改变后马上更新控件
而此控件的核心却在一个方法OnDrawItem 这个方法每当控件的项需要重绘时就被调用
protected override void OnDrawItem(System Windows Forms DrawItemEventArgs pe) pe DrawBackground(); //画背景 pe DrawFocusRectangle(); //画边框 Rectangle bounds = pe Bounds;
// Check whether the index is valid
if(pe Index >= && pe Index < base Items Count) ListBoxExItem item = this Items[pe Index]; //取得需要绘制项的引用 int iOffset = ;
// If the image list is present and the image index is set draw the image
if(this imageList != null) if (item ImageIndex > && item ImageIndex < this imageList Images Count) this imageList Draw(pe Graphics bounds Left bounds Top bounds Height bounds Height item ImageIndex); //绘制图标 iOffset += bounds Height;//this imageList ImageSize Width;
// Draw item text
pe Graphics DrawString(item Text pe Font new SolidBrush(item ForeColor) bounds Left + iOffset bounds Top); //根据项的颜色绘制文本
base OnDrawItem(pe);
cha138/Article/program/net/201311/11713相关参考
知识大全 Asp.net的处理机制和自定义WebServer
Asp.net的处理机制和自定义WebServer 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 ASP.NET入门教程 10.8程序集和自定义服务器控件
ASP.NET入门教程10.8程序集和自定义服务器控件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
知识大全 怎么才能随便更换系统图标比如我的电脑回收站,或者是一些文件夹。不是系统带的。我自己在网上下载的
怎么才能随便更换系统图标比如我的电脑回收站,或者是一些文件夹。不是系统带的。我自己在网上下载的!这个容易,如果想更改回收站的图标,按以下步骤:右击桌面,选择属性,点桌面——自定义桌面——点那里的回收站
C#下实现动态系统托盘图标 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一概述 我这里所指的
C#设计模式之简单工厂篇 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 首先定义一个接口具体名为
列出C#进程以及详细信息 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!建立一个listBox将进程
代码内含说明(界面是两个文本框textboxtextbox和一个button界面的Load事件button的click事件)usingSystem;usingSystemCollectionsGe
用VC设计托盘图标程序 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在Windows操作系统中
全面剖析C#接口编程之定义接口 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 从技术上讲接口是一
自定义事件实现不同窗体间的通讯C#篇 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! C#中的事件