困扰我好一段时间了,很是郁闷,具体做了如下操作:
将一张大小为(1024*16)的位图通过ImageList的AddStrip方法加栽到ImageList中去(64个16*16的小图标),然后创建一棵TreeView,将其ImageList属性设置为刚刚初始化好的ImageList,添加节点并设置各个节点的ImageIndex和SelectedImageIndex.搞定之后显示,奇怪的问题发生了,同样的程序,图像能否显示成功完全没有规律,有的时候能够显示图像,有的则不行。如果能显示,则所有的TreeView都能正确显示,反之都不能。在其他机器上跑也是相同的问题,我尝试着换了那张位图的格式,bmp,png,jpg都试了基本上一样的问题。
我用了dotnetbar系列的控件,其他就没有特别之处了。大家不知道有没有注意,你在使用VS2005时候,如果同时使用sourcesafe之类的版本控制软件,solution explorer中的TreeView在各个文件节点之前是会加上小图标的,比如一把小锁的图标,可是很多机器上是显示不出来的。
将一张大小为(1024*16)的位图通过ImageList的AddStrip方法加栽到ImageList中去(64个16*16的小图标),然后创建一棵TreeView,将其ImageList属性设置为刚刚初始化好的ImageList,添加节点并设置各个节点的ImageIndex和SelectedImageIndex.搞定之后显示,奇怪的问题发生了,同样的程序,图像能否显示成功完全没有规律,有的时候能够显示图像,有的则不行。如果能显示,则所有的TreeView都能正确显示,反之都不能。在其他机器上跑也是相同的问题,我尝试着换了那张位图的格式,bmp,png,jpg都试了基本上一样的问题。
我用了dotnetbar系列的控件,其他就没有特别之处了。大家不知道有没有注意,你在使用VS2005时候,如果同时使用sourcesafe之类的版本控制软件,solution explorer中的TreeView在各个文件节点之前是会加上小图标的,比如一把小锁的图标,可是很多机器上是显示不出来的。
对于大图分小图的知道有这个用法,但是从来没有这么用过,我一般都是一个一个的图来处理的.
-----------改成稳定的方法吧
如果把ColorDepth设下,能显示成功的几率感觉会大些
还是没有一个好地解决办法
以前做Splash的时候,把application起来之前的一句调用
Application.SetCompatibleTextRenderingDefault(false);删掉了(想不起来当初为什么要删)
加上之后就一直可以正常显示了
MSDN上也没有对这个方法的说明,刚google了一下:
大家可以看一下http://blog.csdn.net/harrymeng/archive/2007/01/05/1474987.aspx
引用如下:
在.net2.0中增加了很多新的内容,比如:Application.SetCompatibleTextRenderingDefault方法。
但是,在VS2005附带的MSDN2005中却没有它的详细说明。为此,我查找了MSDN官方网站和MSDN2005的相关属性,获悉了该方法的部分信息。现将其记录如下。一、相关链接1.MSDN网站有Application.SetCompatibleTextRenderingDefault的详细说明,地址:
http://msdn2.microsoft.com/en-us/library/system.windows.forms.application.setcompatibletextrenderingdefault(VS.80).aspx
2.MSDN2005的相关属性UseCompatibleTextRendering,地址:ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.NETDEVFX.v20.chs/CPref17/html/P_System_Windows_Forms_ButtonBase_UseCompatibleTextRendering.htm二、总结1.作用:在应用程序范围内设置控件显示文本的默认方式(可以设为使用新的GDI+ , 还是旧的GDI)
true使用GDI+方式显示文本,
false使用GDI方式显示文本.
2.只能在单独运行窗体的程序中调用该方法;不能在插件式的程序中调用该方法.
3.只能在程序创建任何窗体前调用该方法,否则会引发InvalidOperationException异常.
但是我的“Application.SetCompatibleTextRenderingDefault(false);”是在的啊
把Main里面的Application.EnableVisualStyles();注释掉就OK了