Hallo,
wenn ich mittels ToString() ein Font-Objekt in einen String umwandle erhalte ich ein Ergebnis wie dieses:
[Font: Name=Tahoma, Size=8, Units=3, GdiCharSet=1, GdiVerticalFont=False]
Gibt es eine einfache Möglichkeit diesen String wieder in ein Font-Objekt zu Konvertieren ohne ihn mühselig Parsen zu müssen?
Danke im vorraus!
Wenn du einen String mit
string x = deineFont.Name.ToString()
erstellt kannst du diesen String mit einem Typcast wieder in eine Font wandeln, vielleicht hilft dieses Beispiel?
Damit hätte ich dann aber nur den Namen der Font umgewandelt aber nicht das ganze Objekt, oder?
Original von Interflo
Damit hätte ich dann aber nur den Namen der Font umgewandelt aber nicht das ganze Objekt, oder?
Richtig. Wenn du das ganze Object haben willst dann musst du das entweder serialisieren, oder du speicherst die wichtigsten Eigenschaft (Name, Größe, Style) "von Hand" ab.
Spar dir die weitere Suche. Es gibt nur zwei Konstruktoren für Fonts. Es gibt keine Version die einen String als Beschreibung erwartet. Du kommst um Parsen und überführen in eine FontDescripton-Struktur nicht umhin.
Als XML serialisieren geht aber auch nicht, kann man es binär serialisieren?
Original von jan223
Als XML serialisieren geht aber auch nicht, kann man es binär serialisieren?
Ja
Ich hab mal ein Beispiel zum binären Serialisieren geschrieben:
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
private void FontSerialisieren(Schriftart alleFonts)
{
FileStream str = new FileStream(@"C:\fonts.dat", FileMode.Create);
BinaryFormatter binF = new BinaryFormatter();
binF.Serialize(str, alleFonts);
str.Close();
}
private Schriftart FontDeserialisieren()
{
BinaryFormatter binF = new BinaryFormatter();
FileStream fs = new FileStream(@"C:\fonts.dat", FileMode.Open);
return (Schriftart)binF.Deserialize(fs);
}
[Serializable()]
class Schriftart
{
public Schriftart(Font ersteSchrift, Font zweiteSchriftart)
{
Schrift1 = ersteSchrift;
Schrift2 = zweiteSchriftart;
}
private Font _Schrift1;
public Font Schrift1
{
get { return _Schrift1; }
set { _Schrift1 = value; }
}
private Font _Schrift2;
public Font Schrift2
{
get { return _Schrift2; }
set { _Schrift2 = value; }
}
}
Erstmal Danke für alle Antworten!
Habe das nun so gelöst:
public static string FontToString(Font fntFont, string strDelimiter) {
return Convert.ToString(fntFont.Name) + strDelimiter +
Convert.ToString(fntFont.Size) + strDelimiter +
Convert.ToString(Convert.ToInt32(fntFont.Style));
}
public static Font StringToFont(string strString, string strDelimiter) {
string[] strDelimiters = {strDelimiter};
string[] strProps;
strProps = strString.Split(strDelimiters, StringSplitOptions.None);
return new Font(strProps[0], Convert.ToInt32(strProps[1]), (FontStyle)Convert.ToInt32(strProps[2]));
}
Wo wir wieder beim String-Parsen angelangt wären....
System.ComponentModel.TypeDescriptor.GetConverter(typeof(Font)).ConvertToInvariantString(myFont);
System.ComponentModel.TypeDescriptor.GetConverter(typeof(Font)).ConvertFromInvariantString(myFontString);
@ marsgk
saubere Lösung ! 👍
Hättest meinen ersten Post beachtet, hättest du die Lösung (mit etwas probieren) auch gefunden.