设计带图标和自定义颜色的ListBox
在一个点对点的文件传输项目中,我需要显示文件传输的实时信息:传输的文件列表和当前传输的文件。当时想到用ListBox,但是用了ListBox之后发现它不能改变控件中文本的颜色,于是想扩展ListBox控件——ListBox ex。
我的目标是在空之间添加图标,并不时改变控件文本的颜色。然后从ListBox派生一个类。
公共类ListBoxEx : ListBox {…}
为了操作方便,我为ListBoxEx的每一项设计了一个特殊的类ListBoxExItem。
公共类ListBoxExItem {…}
为了使我的控件与WinForm的标准控件的操作借口保持一致,我重新设计了两个集合类:
class public listbox item collection:ilist,icollection,ienumerator { }
/该类相对于标准listbox中的ObjectCollection,该类充当ListBoxEx中的Items属性的type。
class public selectedListBoxitemcollection::ilist,icollection,ienumerator { }
/该类相对于标准listbox中的SelectedObjectCollection,该类充当ListBoxEx中SelectedItems属性的类型。
看看下面两个集合类的实现:
ListBoxExItemCollection的实现:为了及时将集合(Items)的操作反映到ListBoxEx的控件中,这个类只对ListBox中的Items(ObjectCollection类型)进行包装,即ListBox中Items属性的所有参数只要是object类型的都转换成ListBoxExItem,比如:
public void Remove(ListBoxExItem)
{
this。_Items。移除(项目);//_Items的类型为ObjectCollection
}
public void Insert(int index,ListBoxExItem item)
{
this。_Items。Insert(索引,项);
}
public int Add(ListBoxExItem)
{
return this。_Items。添加(项目);
}
从上面可以看出,ListBoxExItemCollection中有一个构造函数来传递ListBox中的Items对象。
私有ObjectCollection _ Items
public ListBoxExItemCollection(object collection base items)
{
this。_ Items = baseItems
}
而SelectedListBoxItemCollection类的实现使用了相同的方法,只是包装了SelectedObjectCollection。
集合实现后,我们来看看ListBoxExItem的实现:
位律师回复
0条评论