Liebe Community,
ich habe mir nur so zum Spaß mal ein Farb-Paletten-Control erstellt. Die Farbpalette wird dabei als List(Of Color) verwaltet.
Nun habe ich damit allerdings 2 Probleme, die zu lösen ihr mir sicherlich helfen könnt:
1. Die Liste ist über eine Property zugänglich. So weit so gut, ich möchte, wie gewöhnlich, mitkriegen, wann sie die Palette ändert. Nun wird aber der Setter nur aufgerufen, wenn der Property eine neue Liste zugewiesen wird, nicht jedoch, wenn eine der oft genutzen Methoden von List benutzt werden (Add, AddRange, Remove, etc...)
Meine Idee war nun, winfach noch im Getter auf Änderung zu prüfen, aber das ist natürlich Käse, da ja eine Referenz übergeben wurde, die jederzeit Zugriff auf die Liste ermöglicht. Gibt es dafür eine suabere Lösung (ausser sich eine eigene Collection zu erstellen)?
2. Wenn ich nun das erwähnte Palettencontrol im UserControlTestContainer teste, funktioniert alles wie gewohnt: Ich kann die Palette wie gewünscht ändern, alles klappt ohne Probleme.
Wenn ich jetzt die DLL unverändert in ein vorhandenes Projekt einbinde und ein Palettencontrol erstelle, passiert auch nichts. Auch beim Ändern der Palette im Designer nicht. Erst beim erstellen gibt es einen Fehler:
Spoiler anzeigen
Ich habe mir daraufhin erstmal die "Form1.Designer.vb" angeschaut und habe, zu meiner Verwunderung, gesehen, dass die Liste nicht, wie erwartet, hardgecoded war, sondern nur aus einer Ressource geladen wurde. Also hab ich mir die Form1.resx (dort ist auch der Fehler aufgetreten/ gemeldet worden)
angesehen:
Spoiler anzeigen
Das ist der Abschnitt, der die Palette darstellt.
Jetzt ist die Frage: Wo leigt der Fehler? WArum ist die Palette nicht einfach hardgecoded/ ist das immer so?
Ich hoffe, ihr könnt mir meine beiden Fragen beantworten
Danke schon im Vorraus,
mfG,
Hermann
ich habe mir nur so zum Spaß mal ein Farb-Paletten-Control erstellt. Die Farbpalette wird dabei als List(Of Color) verwaltet.
Nun habe ich damit allerdings 2 Probleme, die zu lösen ihr mir sicherlich helfen könnt:
1. Die Liste ist über eine Property zugänglich. So weit so gut, ich möchte, wie gewöhnlich, mitkriegen, wann sie die Palette ändert. Nun wird aber der Setter nur aufgerufen, wenn der Property eine neue Liste zugewiesen wird, nicht jedoch, wenn eine der oft genutzen Methoden von List benutzt werden (Add, AddRange, Remove, etc...)
Meine Idee war nun, winfach noch im Getter auf Änderung zu prüfen, aber das ist natürlich Käse, da ja eine Referenz übergeben wurde, die jederzeit Zugriff auf die Liste ermöglicht. Gibt es dafür eine suabere Lösung (ausser sich eine eigene Collection zu erstellen)?
2. Wenn ich nun das erwähnte Palettencontrol im UserControlTestContainer teste, funktioniert alles wie gewohnt: Ich kann die Palette wie gewünscht ändern, alles klappt ohne Probleme.
Wenn ich jetzt die DLL unverändert in ein vorhandenes Projekt einbinde und ein Palettencontrol erstelle, passiert auch nichts. Auch beim Ändern der Palette im Designer nicht. Erst beim erstellen gibt es einen Fehler:
Fehler 1 Es konnte kein Typ für einen Namen gefunden werden. Der Typname war System.Collections.Generic.List`1[[System.Drawing.Color, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a]], mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089. Zeile 151, Position 5. C:\Users\Anton\Documents\Visual Studio 2010\Projects\Paint\Paint\Form1.resx 151 5 Paint
Ich habe mir daraufhin erstmal die "Form1.Designer.vb" angeschaut und habe, zu meiner Verwunderung, gesehen, dass die Liste nicht, wie erwartet, hardgecoded war, sondern nur aus einer Ressource geladen wurde. Also hab ich mir die Form1.resx (dort ist auch der Fehler aufgetreten/ gemeldet worden)
angesehen:
<data name="ColorPalette1.palette" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EEAQAAAIwBU3lzdGVtLkNv
bGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uRHJhd2luZy5Db2xvciwgU3lzdGVtLkRyYXdp
bmcsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iMDNmNWY3
ZjExZDUwYTNhXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgQAABZTeXN0ZW0uRHJhd2luZy5Db2xv
cltdAgAAAAgICQMAAAAUAAAAFAAAAAcDAAAAAAEAAAAgAAAABBRTeXN0ZW0uRHJhd2luZy5Db2xvcgIA
AAAF/P///xRTeXN0ZW0uRHJhd2luZy5Db2xvcgQAAAAEbmFtZQV2YWx1ZQprbm93bkNvbG9yBXN0YXRl
AQAAAAkHBwIAAAAKAAAAAAAAAAAjAAEAAfv////8////CgAAAAAAAAAATgABAAH6/////P///woAAAAA
AAAAAF8AAQAB+f////z///8KAAAAAAAAAACkAAEAAfj////8////CgAAAAAAAAAAOwABAAH3/////P//
/woAAAAAAAAAACcAAQAB9v////z///8KAAAAAAAAAACNAAEAAfX////8////CgAAAAAAAAAAiQABAAH0
/////P///woAAAAAAAAAAH8AAQAB8/////z///8KAAAAAAAAAABMAAEAAfL////8////CgAAAAAAAAAA
pgABAAHx/////P///wqA////AAAAAAAAAgAB8P////z///8KAAAAAAAAAABPAAEAAe/////8////CgAA
AAAAAAAApwABAAHu/////P///woAAAAAAAAAAKEAAQAB7f////z///8KAAAAAAAAAACEAAEAAez////8
////CgAAAAAAAAAAJQABAAHr/////P///woAAAAAAAAAAJwAAQAB6v////z///8KAAAAAAAAAAAmAAEA
Aen////8////Cue/yP8AAAAAAAACAAHo/////P///woAAAAAAAAAAAAAAAAB5/////z///8KAAAAAAAA
AAAAAAAAAeb////8////CgAAAAAAAAAAAAAAAAHl/////P///woAAAAAAAAAAAAAAAAB5P////z///8K
AAAAAAAAAAAAAAAAAeP////8////CgAAAAAAAAAAAAAAAAHi/////P///woAAAAAAAAAAAAAAAAB4f//
//z///8KAAAAAAAAAAAAAAAAAeD////8////CgAAAAAAAAAAAAAAAAHf/////P///woAAAAAAAAAAAAA
AAAB3v////z///8KAAAAAAAAAAAAAAAAAd3////8////CgAAAAAAAAAAAAAAAAs=
</value>
</data>
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EEAQAAAIwBU3lzdGVtLkNv
bGxlY3Rpb25zLkdlbmVyaWMuTGlzdGAxW1tTeXN0ZW0uRHJhd2luZy5Db2xvciwgU3lzdGVtLkRyYXdp
bmcsIFZlcnNpb249NC4wLjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iMDNmNWY3
ZjExZDUwYTNhXV0DAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgQAABZTeXN0ZW0uRHJhd2luZy5Db2xv
cltdAgAAAAgICQMAAAAUAAAAFAAAAAcDAAAAAAEAAAAgAAAABBRTeXN0ZW0uRHJhd2luZy5Db2xvcgIA
AAAF/P///xRTeXN0ZW0uRHJhd2luZy5Db2xvcgQAAAAEbmFtZQV2YWx1ZQprbm93bkNvbG9yBXN0YXRl
AQAAAAkHBwIAAAAKAAAAAAAAAAAjAAEAAfv////8////CgAAAAAAAAAATgABAAH6/////P///woAAAAA
AAAAAF8AAQAB+f////z///8KAAAAAAAAAACkAAEAAfj////8////CgAAAAAAAAAAOwABAAH3/////P//
/woAAAAAAAAAACcAAQAB9v////z///8KAAAAAAAAAACNAAEAAfX////8////CgAAAAAAAAAAiQABAAH0
/////P///woAAAAAAAAAAH8AAQAB8/////z///8KAAAAAAAAAABMAAEAAfL////8////CgAAAAAAAAAA
pgABAAHx/////P///wqA////AAAAAAAAAgAB8P////z///8KAAAAAAAAAABPAAEAAe/////8////CgAA
AAAAAAAApwABAAHu/////P///woAAAAAAAAAAKEAAQAB7f////z///8KAAAAAAAAAACEAAEAAez////8
////CgAAAAAAAAAAJQABAAHr/////P///woAAAAAAAAAAJwAAQAB6v////z///8KAAAAAAAAAAAmAAEA
Aen////8////Cue/yP8AAAAAAAACAAHo/////P///woAAAAAAAAAAAAAAAAB5/////z///8KAAAAAAAA
AAAAAAAAAeb////8////CgAAAAAAAAAAAAAAAAHl/////P///woAAAAAAAAAAAAAAAAB5P////z///8K
AAAAAAAAAAAAAAAAAeP////8////CgAAAAAAAAAAAAAAAAHi/////P///woAAAAAAAAAAAAAAAAB4f//
//z///8KAAAAAAAAAAAAAAAAAeD////8////CgAAAAAAAAAAAAAAAAHf/////P///woAAAAAAAAAAAAA
AAAB3v////z///8KAAAAAAAAAAAAAAAAAd3////8////CgAAAAAAAAAAAAAAAAs=
</value>
</data>
Das ist der Abschnitt, der die Palette darstellt.
Jetzt ist die Frage: Wo leigt der Fehler? WArum ist die Palette nicht einfach hardgecoded/ ist das immer so?
Ich hoffe, ihr könnt mir meine beiden Fragen beantworten
Danke schon im Vorraus,
mfG,
Hermann