Ich versuche, die Bilder in einem TreeView in C# aus einer .ico-Datei mit zwei Symbolen festzulegen: eine 32 x 32-Version und eine 16 x 16-Version. Die Bilder werden eingestellt, aber .Net wählt die 32x32-Version und verkleinert sie (was schrecklich aussieht), anstatt das einfach verfügbare 16x16-Bild auszuwählen.C#: Verwenden von .ico-Datei mit mehreren Bildern
Der entsprechende Code:
ilTree.Images.Add(Properties.Resources.group);
ilTree.Images.Add(Properties.Resources.single);
ilTree.Images.Add(Properties.Resources.db);
treeStored.ImageList = ilTree;
Wo falsch gehe ich?
Antwort:
Es gibt zwei Dinge, die Sie tun müssen, diese Arbeit zu bekommen. Die erste, wie unten erwähnt, ist die manuelle Angabe der richtigen Größe für die Bildliste. Die zweite ist, dass Sie wahrscheinlich auch die Farbtiefe angeben müssen. MSDN gibt Folgendes an:
In der .NET Framework-Version 1.1 oder höher ist der Standardwert Depth8Bit.
... das verhinderte jedoch nicht, dass ImageList Farben aus meinem 8-Bit-Symbol löschte. Bei näherer Betrachtung waren meine Icons (es waren drei): 4bit, 4bit, 8bit. Die zwei 4-Bit-Symbole teilten Paletten, die 8-Bit-Symbole hatten jedoch eine andere. Insgesamt gab es 257 Farben zwischen den Symbolen. Trotz des nur geringen Überlaufs hat .Net es auf nur Farben gebracht.
Nun, es funktioniert. Obwohl es sicherlich viel schöner wäre, wenn TreeView nur The Right Thing ™ machen würde ... – Thanatos
Eigentlich nicht ganz. Dies - ilTree.ColorDepth = ColorDepth.Depth24Bit; - Wird auch benötigt. Ansonsten scheint es (falsch) 16-Bit anzunehmen. – Thanatos
Der Standardwert ist 8-Bit, aber die Bilder sollten mit der je zuvor angegebenen Farbtiefe geladen werden. – snarf