Entwickler-Ecke
IO, XML und Registry - Font in Registry schreiben
Chryzler - So 17.06.07 13:02
Titel: Font in Registry schreiben
Hi,
wiedermal ein Problem. Baue mir gerade einen Texteditor und muss (oder eher will) die letzte verwendete Schriftart in der Registry abspeichern. Also schreibe ich per
C#-Quelltext
1: 2:
| Font TextFont; regKey.SetValue("TextFont", TextFont, RegistryValueKind.Unknown); |
die Schriftart in die Registry. Klappt auch problemlos. In Regedit wird der Wert so dargestellt:
Zitat: |
[Font: Name=Courier New, Size=9,75, Units=3, GdiCharSet=0, GdiVerticalFont=False]
|
Nun wollte ich den Wert wieder per
C#-Quelltext
1: 2: 3:
| RegistryKey regKey; Font TextFont; TextFont = (Font)regKey.GetValue("TextFont", 0)); |
einlesen, jedoch kann er den String aus der Registry nicht mehr in einen Font casten, ist ja eigentlich logisch.
Wie kann ich nun am geschicktesten diese dumme Schriftart in der Registry abspeichern? Irgendeinen anderen
RegistryValueKind nehmen oder so? :nixweiss:
Danke schonmal!
Chryzler
Kha - So 17.06.07 15:40
Was spricht denn gegen die simple Verwendung einer Config-Datei statt des plattformabhängigen Registrierungszeugs?
JüTho - So 17.06.07 16:11
Unabhängig von der Frage Registry oder Config: Für die Konvertierung Font <-> String gibt es folgende Methoden:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| using System.ComponentModel.TypeDescriptor; Font myFont; string myFontString; myFontString = GetConverter(typeof(Font)).ConvertToInvariantString(myFont); myFont = GetConverter(typeof(Font)).ConvertFromInvariantString(myFontString); |
Gruß Jürgen
Chryzler - So 17.06.07 17:34
Khabarakh hat folgendes geschrieben: |
Was spricht denn gegen die simple Verwendung einer Config-Datei statt des plattformabhängigen Registrierungszeugs? |
Nun, so richtig Plattformunabhängig ist .NET nun wirklich nicht. Allein für eine simple Konsolenanwendung, die ich für Windows geschrieben hab, musste ich die Hälfte Code löschen, weil Mono jede zweite Methode nicht kannte. Wie soll das dann bei einer WinForms-Anwendung aussehen?
JüTho hat folgendes geschrieben: |
Unabhängig von der Frage Registry oder Config: Für die Konvertierung Font <-> String gibt es folgende Methoden:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7:
| using System.ComponentModel.TypeDescriptor; Font myFont; string myFontString; myFontString = GetConverter(typeof(Font)).ConvertToInvariantString(myFont); myFont = GetConverter(typeof(Font)).ConvertFromInvariantString(myFontString); |
Gruß Jürgen |
Sieht sehr interessant aus und funktioniert perfekt. Man kann also praktisch jeden Typ in einen String umwandeln? Ich werds jetzt erstmal so machen, vielleicht entscheide ich mich später doch nochmal um auf eine Config-Datei, mal sehen.
P.S: Der Codeschnipsel muss so lauten:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| using System.ComponentModel; Font myFont; string myFontString; myFontString = (string)TypeDescriptor.GetConverter(typeof(Font)).ConvertToInvariantString(myFont); myFont = (Font)TypeDescriptor.GetConverter(typeof(Font)).ConvertFromInvariantString(myFontString); |
UGrohne - So 17.06.07 17:40
Chryzler hat folgendes geschrieben: |
Khabarakh hat folgendes geschrieben: | Was spricht denn gegen die simple Verwendung einer Config-Datei statt des plattformabhängigen Registrierungszeugs? |
Nun, so richtig Plattformunabhängig ist .NET nun wirklich nicht. Allein für eine simple Konsolenanwendung, die ich für Windows geschrieben hab, musste ich die Hälfte Code löschen, weil Mono jede zweite Methode nicht kannte. Wie soll das dann bei einer WinForms-Anwendung aussehen? |
.NET ist nicht richtig plattformabhängig, das ist korrekt. Die Registrierung ist es aber, denn die gibt es nur unter Windows.
JüTho - So 17.06.07 19:53
Chryzler hat folgendes geschrieben: |
P.S: Der Codeschnipsel muss so lauten:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7:
| using System.ComponentModel; Font myFont; string myFontString; myFontString = (string)TypeDescriptor.GetConverter(typeof(Font)).ConvertToInvariantString(myFont); myFont = (Font)TypeDescriptor.GetConverter(typeof(Font)).ConvertFromInvariantString(myFontString); | |
Sorry, den
Cast auf Font hatte ich vergessen zu kopieren. Der Cast auf String ist aber überflüssig. Jürgen
Kha - Mo 18.06.07 14:35
Chryzler hat folgendes geschrieben: |
Nun, so richtig Plattformunabhängig ist .NET nun wirklich nicht. |
Die Plattformunabhängigkeit ist auch nur das schwächste Argument für Configs. Erstens sind sie, wie ich schon schrob, um Einiges leichter einzusetzen, zweitens sind sie einfach der .nette Standard, der "Way to go" (s. z.B. ClickOnce & ASP.Net).
Chryzler hat folgendes geschrieben: |
Man kann also praktisch jeden Typ in einen String umwandeln? |
Jeden, der mit einem TypeConverterAttribute versehen ist, das sind aber schon einige. TypeConverters sind übrigens auch jene Klassen, die die XAML-Attribute parsen.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!