无法修改Forms.ImageList.Images集合键值,TreeView关联ImageList遇问题
解决.NET ImageList Keys赋值不生效的问题
嘿,我之前也踩过这个坑!你遇到的问题其实是因为ImageList.ImageCollection.Keys的索引器看起来可写,但实际直接赋值根本不会生效——这算是文档描述有点误导人的地方。
问题原因
当你用MyIL.Images.Add(Properties.Resources.CheckedItemBitmap, Color.White)这个重载添加图像后,返回的索引i对应的键默认是空的。虽然文档说Keys属性可设置,但直接执行MyIL.Images.Keys[i] = "Checked"并不会真正修改底层的键值映射,因为这个索引器的设置操作并没有实现实际的更新逻辑,本质上相当于只读。
正确的解决方案
你需要用ImageList.ImageCollection提供的**SetKeyName方法**来设置键,这才是官方推荐的正确方式,代码改成这样:
int i; i = MyIL.Images.Add(Properties.Resources.CheckedItemBitmap, Color.White); MyIL.Images.SetKeyName(i, "Checked"); // 用这个方法替代直接赋值Keys[i]
执行这段代码后,你再去看MyIL.Images.Keys[i],就会发现它已经变成"Checked"了,而且你也可以通过键名MyIL.Images["Checked"]直接访问对应的图像。
补充说明
之所以不能直接赋值Keys[i],是因为Keys返回的是一个KeysCollection对象,它的索引器设置操作只是一个空实现(或者说没有绑定到底层的键值存储),而SetKeyName方法会直接操作ImageCollection的内部存储,确保键值被正确关联。
内容的提问来源于stack exchange,提问作者fiduce
相关产品推荐
相关产品推荐

