Benutzer mit den meisten Antworten
ColorDialog Werte in Registry schreiben und auslesen

Frage
-
Hallo!
Ich muss leider wieder mit vermutlich einer belanglosigkeit nerven.
Ich will einen Farbwert den ich vorher mittels einen ColorDialog ermittelt habe in die Registry schreiben und beim neu starten der Applikation den Farbwert auslesen und als Form1.BackColor zuweisen.
Hier der bis jetzige Source:
Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("wieauchimmer",true); ColorDialog colorDlg = new ColorDialog(); if (colorDlg.ShowDialog() == DialogResult.OK) { this.BackColor = colorDlg.Color; key.SetValue("Farbe", Convert.ToString(colorDlg.Color));
}Nun bei Form1_load:
String regFar_save = Convert.ToString(key.GetValue("Farbe")); Color regBag_save = Color.FromName(regFar_save); if (regFar_save != "") { this.BackColor = regBag_save; }
So, er jammert nun beim starten über einen transparenten Hintergrund. Das ist aber scheinbar nur weil die Zuweisung nicht funktioniert.In meiner Registry stehen nun entweder Werte wie : Color [Lime] oder Color [A=255, R=47, G=116, B=138].
Auch die Umdefinition auf : key.SetValue("Farbe", colorDlg.Color.Name); bei der Speicherung, hilft mir nicht wirklich. Die Werte sind dann entweder Lime oder 003344 . Trotzdem..
Danke im Vorraus!
Antworten
-
Hallo J.,
Hier eine Möglichkeit:
RegistryKey key = Registry.CurrentUser.CreateSubKey("wieAuchImmer"); ColorConverter cc = new ColorConverter(); ColorDialog colorDlg = new ColorDialog(); if (colorDlg.ShowDialog() == DialogResult.OK) { this.BackColor = colorDlg.Color; key.SetValue("Farbe", cc.ConvertToInvariantString(colorDlg.Color)); } colorDlg.Dispose(); string regFar_save = Convert.ToString(key.GetValue("Farbe")); Color regBag_save = (Color)cc.ConvertFromInvariantString(regFar_save); key.Dispose();
Ein Transparenz-Fehler kann kommen, wenn der Alpha-Wert (A) der Farbe einen Wert != 255 aufweist (also ggf. falsch deserialisiert wurde), denn normal unterstützten die Steuerelemente "erstmal" keine transparente BackColor. Letztlich kann man das natürlich erreichen.
Normal speichert man solche Konfigurations-Werte in XML-Dateien o.ä., was .NET dann meist quasi automatisch macht.
Die Registry ist ~normal eher zu vermeiden, wenn nicht wichtige Gründe vorliegen.
ciao Frank- Als Antwort markiert Joe Waynsen Dienstag, 15. Februar 2011 21:46
- Bearbeitet Frank Dzaebel Mittwoch, 16. Februar 2011 05:58
Alle Antworten
-
Hallo J.,
Hier eine Möglichkeit:
RegistryKey key = Registry.CurrentUser.CreateSubKey("wieAuchImmer"); ColorConverter cc = new ColorConverter(); ColorDialog colorDlg = new ColorDialog(); if (colorDlg.ShowDialog() == DialogResult.OK) { this.BackColor = colorDlg.Color; key.SetValue("Farbe", cc.ConvertToInvariantString(colorDlg.Color)); } colorDlg.Dispose(); string regFar_save = Convert.ToString(key.GetValue("Farbe")); Color regBag_save = (Color)cc.ConvertFromInvariantString(regFar_save); key.Dispose();
Ein Transparenz-Fehler kann kommen, wenn der Alpha-Wert (A) der Farbe einen Wert != 255 aufweist (also ggf. falsch deserialisiert wurde), denn normal unterstützten die Steuerelemente "erstmal" keine transparente BackColor. Letztlich kann man das natürlich erreichen.
Normal speichert man solche Konfigurations-Werte in XML-Dateien o.ä., was .NET dann meist quasi automatisch macht.
Die Registry ist ~normal eher zu vermeiden, wenn nicht wichtige Gründe vorliegen.
ciao Frank- Als Antwort markiert Joe Waynsen Dienstag, 15. Februar 2011 21:46
- Bearbeitet Frank Dzaebel Mittwoch, 16. Februar 2011 05:58