You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:31:27