2009-06-08 8 views
7

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.

Répondre

5

Vous devez créer un nouvel objet d'icônes. Il y a une surcharge pour le constructeur qui accepte l'objet Icon original et une taille. Je ne sais pas si le nouvel objet Icon partagera le même HIcon, mais il dessinera correctement. Pour être sûr, je recommanderais de veiller à ce que les deux soient éliminés.

+0

Eh bien, cela fonctionne. Bien qu'il serait certainement beaucoup plus agréable si TreeView ferait juste The Right Thing ™ ... – Thanatos

+0

En fait, pas tout à fait. Ceci - ilTree.ColorDepth = ColorDepth.Depth24Bit; - est également nécessaire. Sinon, il semble supposer (incorrectement) 16 bits. – Thanatos

+0

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

1

Définissez la propriété ImageSize du ImageList à un nouveau format (16, 16)

+0

C'est la taille par défaut de l'ImageList - le réglage manuel (et n'a, quand je l'ajoute) aucun effet. – Thanatos

+0

hmm, cela a déjà travaillé pour moi. Le définissez-vous avant d'ajouter les images ou après? Je n'ai pas réalisé que c'était le défaut. – rein

+0

J'ai essayé de l'ajouter avant. Après n'a également aucun effet. – Thanatos

Questions connexes