Laden...

String in Font Konvertieren?

Erstellt von Interflo vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.537 Views
I
Interflo Themenstarter:in
18 Beiträge seit 2005
vor 17 Jahren
String in Font Konvertieren?

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!

460 Beiträge seit 2004
vor 17 Jahren

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?

I
Interflo Themenstarter:in
18 Beiträge seit 2005
vor 17 Jahren

Damit hätte ich dann aber nur den Namen der Font umgewandelt aber nicht das ganze Objekt, oder?

149 Beiträge seit 2005
vor 17 Jahren

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.

Schon als Kindern war uns klar: Jeder von uns wird ein Star, oder Millionär - das ist doch auch nicht schwer. Dem Alkohol nicht abgeneigt, war es für uns auch nicht leicht. Durch seine Hände Arbeit, wird man auch nicht gleich ein Scheich.
S
8.746 Beiträge seit 2005
vor 17 Jahren

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.

460 Beiträge seit 2004
vor 17 Jahren

Als XML serialisieren geht aber auch nicht, kann man es binär serialisieren?

149 Beiträge seit 2005
vor 17 Jahren

Original von jan223
Als XML serialisieren geht aber auch nicht, kann man es binär serialisieren?

Ja

Schon als Kindern war uns klar: Jeder von uns wird ein Star, oder Millionär - das ist doch auch nicht schwer. Dem Alkohol nicht abgeneigt, war es für uns auch nicht leicht. Durch seine Hände Arbeit, wird man auch nicht gleich ein Scheich.
460 Beiträge seit 2004
vor 17 Jahren

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; }
        }	
    }

M
1.439 Beiträge seit 2005
vor 17 Jahren

FontConverter bzw. die Basisklasse TypeConverter.

I
Interflo Themenstarter:in
18 Beiträge seit 2005
vor 17 Jahren

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]));
}

S
8.746 Beiträge seit 2005
vor 17 Jahren

Wo wir wieder beim String-Parsen angelangt wären....

I
Interflo Themenstarter:in
18 Beiträge seit 2005
vor 17 Jahren

Genau 😠

M
1.439 Beiträge seit 2005
vor 17 Jahren

System.ComponentModel.TypeDescriptor.GetConverter(typeof(Font)).ConvertToInvariantString(myFont);
System.ComponentModel.TypeDescriptor.GetConverter(typeof(Font)).ConvertFromInvariantString(myFontString);

460 Beiträge seit 2004
vor 17 Jahren

@ marsgk

saubere Lösung ! 👍

I
Interflo Themenstarter:in
18 Beiträge seit 2005
vor 17 Jahren

Ah Danke sehr gut! Netter trick über den TypeDescriptor 😉

M
1.439 Beiträge seit 2005
vor 17 Jahren

Hättest meinen ersten Post beachtet, hättest du die Lösung (mit etwas probieren) auch gefunden.