为ListView动态组合图标.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
为ListView动态组合图标 浙江省丽水市汽车运输集团有限公司信息中心 苟安廷 注:本文代码请到 6/上下载 我们先来看一组大家很熟悉的图标: 很显然,这是表示网络状态的一组图标,第一个表示正常状态,第二个表示禁用状态,后面的四个图标是在前面两个的基础上增加了断开、有防火墙或者既断开又有防火墙的几种附加状态,通常,我们用ListView控件来表示这类状态。 图中可以看出,共有两种基本状态:正常和禁用,两种附加状态,有防火墙和断开,所有的状态都是由基本状态和附加状态组合而成的。如何实现呢?你可以参照上图准备六个图标,并根据不同的状态选择显示不同的图标,但这是比较简单的情况,以宾馆客房为例,通常有空房、维修、入住、预留、脏房等m种基本状态,以及预订、有食品、叫醒等n种附加状态,那么你要准备多少个图标呢?(m+1)×n个?不对,因为许多附加状态是同时出现的,如上图中断开且有防火墙,这时,最理想的办法就是准备m个基本图标,n个附加图标,然后根据实际需要动态组合起来,但ListView本身并不支持动态图标的组合,本文就讨论如何实现这一设想,希望对有类似需求的朋友提供一些思路。 打开VS2005,新建一个C#的windows项目,不妨取名为DyIconForListView吧,在窗口上放一个ListView控件(为简化叙述,我们都使用默认的控件名),设置其View属性为LargIcon,再放两个ImageList控件,imageList1的图象大小属性ImageSize=40×40,表示基本状态,因此图标要大一些,imageList2的图象大小属性ImageSize=12×12,表示基本附加状态,因此,图标小一些,并将listView1的LargImageList设置为imagaList1,SmallImageList不用设置,imageList2是组合用的。通过截取屏幕等方法准备两个40×40的位图,一个表示网络正常状态,一个表示禁用状态,并添加到imageList1中,再准备两个12×12的小位图,一个为表示断开的“×”图标,一个为表示有防火墙的“锁”图标,并添加到imageList2中。 为了显示各种状态,我们还必须增加一些其他控件。在窗口上放一个ListBox 控件,用来选择当前使用哪一种基本状态,放一个CheckListBox控件,用来选择当前使用哪几种附加状态,当然,还要放一个Button控件,用来将设置的状态显示出来,为了不太难看,将Button1的Text属性改为“设置”吧,布置好后,界面如下: 切换到代码窗口中,增加引用: using System.Collections; 增加两个枚举,用来表示基本状态和附加状态的名称,注意,对于附加状态,每一种状态用字节中的一个位表示,由于附加状态图标通常是放在基本图标的四个角落上的,也就是说通常不会超过四种,最多再加上四个边,共八种附加图标,但这样一来,基本图标就被挡得看不清楚了,实际上也用不到这么多附加状态。 private enum BaseStateNames { 正常 = 0, 禁用 = 1 } private enum AttachStateNames { 断开=1, //二进制 有防火墙=2 //二进制 //如果有其他附加状态依此类推 //第三种状态=4 //二进制 } 编写Load事件,为ListView增加一个Item,用于显示设置的结果,并将基本状态和附加状态的名称显示在ListBox和CheckListBox控件中供选择: private void Form1_Load(object sender, EventArgs e) { ListViewItem item = new ListViewItem(本地连接); this.listView1.Items.Add(item); this.listBox1.Items.AddRange(Enum.GetNames(typeof(BaseStateNames))); this.checkedListBox1.Items.AddRange(Enum.GetNames(typeof(AttachStateNames))); } 编写一个函数,将一个基本位图(不是图标)

文档评论(0)

youbika + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档