2009-06-08 3 views
7

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.

Antwort

5

Sie benötigen ein neues Icon-Objekt zu erstellen. Es gibt eine Überladung für den Konstruktor, der das ursprüngliche Icon-Objekt und eine Größe akzeptiert. Ich weiß nicht, ob das neue Icon-Objekt das gleiche HIcon teilen wird, aber es wird richtig zeichnen. Um sicherzugehen, würde ich empfehlen, sicherzustellen, dass beide entsorgt werden.

+0

Nun, es funktioniert. Obwohl es sicherlich viel schöner wäre, wenn TreeView nur The Right Thing ™ machen würde ... – Thanatos

+0

Eigentlich nicht ganz. Dies - ilTree.ColorDepth = ColorDepth.Depth24Bit; - Wird auch benötigt. Ansonsten scheint es (falsch) 16-Bit anzunehmen. – Thanatos

+0

Der Standardwert ist 8-Bit, aber die Bilder sollten mit der je zuvor angegebenen Farbtiefe geladen werden. – snarf

1

Set der Größe Eigenschaft des Abbildungsliste auf neue Größe (16, 16)

+0

Das ist die Standardgröße der ImageList - manuelle Einstellung würde (und hat, wenn ich es hinzufüge) keinen Effekt. – Thanatos

+0

hmm, das hat vorher bei mir funktioniert. Stellen Sie es ein, bevor Sie die Bilder hinzufügen oder danach? Hab nicht gemerkt, dass es der Standard war. – rein

+0

Ich habe versucht, es vorher hinzuzufügen. Nach hat auch keine Wirkung. – Thanatos

Verwandte Themen