J'essaie de définir les images dans un TreeView en C#, à partir d'un fichier .ico contenant deux icônes: une version 32x32 et une version 16x16. Les images sont paramétrées, mais .Net choisit la version 32x32, et la réduit (ce qui semble terrible) au lieu de choisir l'image 16x16 facilement disponible.C#: Utilisation du fichier .ico avec plusieurs images
Le code correspondant:
ilTree.Images.Add(Properties.Resources.group);
ilTree.Images.Add(Properties.Resources.single);
ilTree.Images.Add(Properties.Resources.db);
treeStored.ImageList = ilTree;
Où vais-je tort?
Réponse:
Il y a deux choses que vous devez faire pour obtenir ce travail. Le premier, comme mentionné ci-dessous, consiste à spécifier manuellement la taille correcte à la liste d'images. La seconde est que vous devrez probablement spécifier la profondeur de couleur. MSDN indique que:
Dans .NET Framework version 1.1 ou ultérieure, la valeur par défaut est Depth8Bit.
Cependant, cela n'a pas empêché ImageList de supprimer les couleurs de mon icône 8 bits. En y regardant de plus près, mes icônes (il y en avait trois) étaient: 4bit, 4bit, 8bit. Les deux icônes 4 bits partageaient les palettes, mais la 8bit en avait une différente. Au total, il y avait 257 couleurs entre les icônes. Malgré le seul léger débordement, .Net l'a fait tomber à couleurs.
Eh bien, cela fonctionne. Bien qu'il serait certainement beaucoup plus agréable si TreeView ferait juste The Right Thing ™ ... – Thanatos
En fait, pas tout à fait. Ceci - ilTree.ColorDepth = ColorDepth.Depth24Bit; - est également nécessaire. Sinon, il semble supposer (incorrectement) 16 bits. – Thanatos
La valeur par défaut est 8 bits, mais vous devez charger les images avec la profondeur de couleur que vous avez spécifiée précédemment. – snarf