ImageList组件用了很久,但是一直不太清楚它的实现原理,今天专门特意花了时间倒腾了下,终于弄明白了!于是在这里和大家分享下!

在设计页面中打卡工具箱-组件 找到ImageList组件,将它直接拖到页面上,将会自动在设计也生成初始化代码,如下:

 //.Designer.cs设计页面自动生成的初始化代码
private System.Windows.Forms.ImageList imageList1;
//
// imageList1
//
this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
this.imageList1.Images.SetKeyName(, "open.ico");
this.imageList1.Images.SetKeyName(, "save.ico");
this.imageList1.Images.SetKeyName(, "退出.ico");
this.imageList1.Images.SetKeyName(, "delete.ico");

在设计页面打开属性窗口,点击Images后面的三个小点按钮打开 图像集合编辑器 如下图:

点击添加按钮将会直接从本地加载图片到ImageList中,这里就有一个问题,添加的图片是以什么形式添加的呢?是路径还是二级制流?如果是图片那应该在右边的属性窗口能看到图片的路径才对,而这里看不到,说明图片应该是已二进制流或者说是图片流的形式保存的。而通过参考之前的设计页的初始化代码也可以看出,程序在初始化的时候是直接用resources对象加载图片流的,而这里是看不到它是从哪里加载的,那么首先要搞明白resources对象是什么东东?先看下这个对象的声明:

 System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmImportCardInfo));
// 摘要:
// 提供组件或对象的枚举资源的简单功能。System.ComponentModel.ComponentResourceManager 类是一个 System.Resources.ResourceManager。
public class ComponentResourceManager : ResourceManager

从以上代码可以看出其实resources是类ComponentResourceManager的对象,而这个类又是继承自ResourceManager类,很明显它就是一个用于管理本地资源的一个类。弄清楚了这个,就知道我们添加进去的图片是存在本地资源中的。而我们的每个窗体在设计的时候,如果添加了图片等资源类的对象时会自动生成一个文件,也就是拓展名为.resx的文件,如果没有,那么我们的每个窗体一般只有两个文件:.cs文件和.Designer.cs文件。

在项目中双击打开.resx文件,显示可视化界面如图:

在窗体中添加的资源,默认都会在该文件中,除非在项目中另外添加了Resources.resx资源类文件。从上图可以看出添加的资源类名称和之前在设计页自动生成的代码引入的资源名称是一致的:resources.GetObject("imageList1.ImageStream"),所以到这里我们就已经确定了添加的图片确实是保存在.resx文件中的。不过在这个页面我们还看不到它的值。不过,我们可以用记事本打开的方式打开该文件(爱动手的程序猿最可怕),显示如图:

可以看出,它的值是以base64编码的形式存储在文件中的。所以,所有添加的图片实际上是直接保存在项目中,而不是保存地址。如果将ImageList直接Copy到其他页面,那么也会在相应窗体创建这样一个资源文件用于保存图片。

我的网站原文链接:浅谈ImageList

浅谈ImageList的更多相关文章

  1. 浅谈 Fragment 生命周期

    版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Fragment 文中如有纰漏,欢迎大家留言指出. Fragment 是在 Android 3.0 中 ...

  2. 浅谈 LayoutInflater

    浅谈 LayoutInflater 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/View 文中如有纰漏,欢迎大家留言指出. 在 Android 的 ...

  3. 浅谈Java的throw与throws

    转载:http://blog.csdn.net/luoweifu/article/details/10721543 我进行了一些加工,不是本人原创但比原博主要更完善~ 浅谈Java异常 以前虽然知道一 ...

  4. 浅谈SQL注入风险 - 一个Login拿下Server

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

  5. 浅谈WebService的版本兼容性设计

    在现在大型的项目或者软件开发中,一般都会有很多种终端, PC端比如Winform.WebForm,移动端,比如各种Native客户端(iOS, Android, WP),Html5等,我们要满足以上所 ...

  6. 浅谈angular2+ionic2

    浅谈angular2+ionic2   前言: 不要用angular的语法去写angular2,有人说二者就像Java和JavaScript的区别.   1. 项目所用:angular2+ionic2 ...

  7. iOS开发之浅谈MVVM的架构设计与团队协作

    今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  8. Linux特殊符号浅谈

    Linux特殊字符浅谈 我们经常跟键盘上面那些特殊符号比如(?.!.~...)打交道,其实在Linux有其独特的含义,大致可以分为三类:Linux特殊符号.通配符.正则表达式. Linux特殊符号又可 ...

  9. 浅谈Angular的 $q, defer, promise

    浅谈Angular的 $q, defer, promise 时间 2016-01-13 00:28:00  博客园-原创精华区 原文  http://www.cnblogs.com/big-snow/ ...

随机推荐

  1. [原创]实现android知乎、一览等的开场动画图片放大效果

    代码下载地址: https://github.com/Carbs0126/AutoZoomInImageView 知乎等app的开场动画为:一张图片被显示到屏幕的正中央,并充满整个屏幕,过一小段时间后 ...

  2. PD16 Generate Datebase For Sql2008R2时报脚本错误“对象名sysproperties无效”

    PowerDesinger16创建数据库表到SQL2008R2时,执行报“对象名sysproperties无效”错误. 主要是在建模时我们对表.列增加了些说明注释,而Sql2005之后系统表syspr ...

  3. TWaver Flex开发示例及license下载

    做电信项目的朋友一定知道TWaver,而Flex版具有很好的跨平台性,很适合做B/S模式的应用. Flex版的在线DEMO:http://twaver.servasoft.com/demo/twave ...

  4. 安装vs2013以后,链接数据库总是报内存损坏,无法写入的错误

    安装vs2013以后,链接数据库总是报内存损坏,无法写入的错误 这个错误几个月以前解决过一次,但是到又碰到的时候,竟然完全忘记当时怎么解决的了, 看来上了年纪记忆真是越来越不行了... 解决方案很简单 ...

  5. 高性能优化Web前端

    高性能HTML 一.避免使用iframe iframe也叫内联frame,可将一个HTML文档嵌入另一个HTML文档中. iframe的好处是,嵌入的文档独立于父文档,通常也借此使浏览器模拟多线程.缺 ...

  6. smdkv210

    参考:http://code.google.com/p/libyuv/issues/detail?id=295 ******************************************** ...

  7. Android源码网站

    https://mirrors.tuna.tsinghua.edu.cn/ https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/ https://mirror ...

  8. 关于STM32 CAN回环可用,正常不可用情况分析

    1.回环下应该与GPIO无关 2.GPIO是否初始化正确,时钟启用 3.是否复用,AFIO时钟是否启用 4.回环下是否有CAN_Tx应该有输出 5.终端电阻是否有 6.CAN收发器电路电压是否正常 7 ...

  9. android html 与webview属性从冲突

    在最近的项目开发中,使用webview加载html页面,这样可以节省大量页面开发的时间,同时也可加快项目进度. 我们需求是需要显示商品评论,页面设计如下: 调用android代码,对于webview的 ...

  10. DNS反射攻击阻止

    刚搭的dns server就有贱人跑dns反射放大攻击,据说bind高版本没洞,但是日志刷刷的跑,感觉也不放心,而且毕竟dns是返回了请求的,所以找了点资料备忘 先设定不受限制的网段 iptables ...