2017-09-11 1 views
-2
TypeConverter converter = TypeDescriptor.GetConverter(typeof(Font)); 
Font font = (Font)converter.ConvertFromString("[Font: Name=Arial, Size=48, Units=3, GdiCharSet=0, GdiVerticalFont=False]"); 
this.Font = font; 

Fehler Schriftart in => System.ArgumentException: 'Wert der 'Größe = 48 Einheiten = 3, GdiCharSet = 0, GdiVerticalFont = False]' ist nicht gültig für' Einheiten'.'Kann Zeichenkette nicht konvertieren C#

+0

Lesen Sie diesen https://stackoverflow.com/questions/5039543/change-font-of-a-string-in-c-sharp –

+4

Gemessen an dem Beispiel in der [Dokumentation] (https://msdn.microsoft.com/en-us/library/system.drawing.fontconverter (v = vs.110) .aspx # Anchor_5) Die Zeichenfolge sieht nicht so aus, als hätte sie das richtige Format. Können Sie näher erläutern, wie Sie zu diesem Format gekommen sind? –

+0

https://msdn.microsoft.com/en-us/library/system.drawing.fontconverter(v=vs.110).aspx#Examples Ihre Zeichenfolge sieht falsch aus – Hybridzz

Antwort

1

Das hier Problem ist, dass Sie die Font.ToString() Methode verwendet haben, um eine Zeichenfolge zu erzeugen, die FontConverter nicht unterstützt.

Stattdessen sollten Sie FontConverter auch verwenden, um die Zeichenfolge zu erzeugen und Sie würden einen String zurück, der wie folgt aussieht:

Arial; 12pt; style=Bold 

Das gleiche Font-Objekt durch seine .ToString() Methode laufen gibt:

[Font: Name=Arial, Size=12, Units=3, GdiCharSet=1, GdiVerticalFont=False] 

Für Ihre spezielle Zeichenfolge sollten Sie stattdessen diese Zeichenfolge verwenden:

"Arial; 48pt" 
+0

Vielen Dank. Das funktioniert ... –

0

Versuchen Sie Folgendes:

TypeConverter converter = TypeDescriptor.GetConverter(typeof(Font)); 
Font font = (Font)converter.ConvertFromString("Arial, 48pt"); 
this.Font = font; 
+0

Danke für Ihre Antwort. –

0

Dies wird von Microsoft nicht gut dokumentiert.

Wenn Sie jedoch auf der reference source for FontConverter aussehen werden Sie sehen folgendes:

internal class UnitName { 

    internal string name; 

    internal GraphicsUnit unit; 

    internal static readonly UnitName[] names = new UnitName[] { 
      new UnitName("world", GraphicsUnit.World), // made up 
      new UnitName("display", GraphicsUnit.Display), // made up 
      new UnitName("px", GraphicsUnit.Pixel), 
      new UnitName("pt", GraphicsUnit.Point), 
      new UnitName("in", GraphicsUnit.Inch), 
      new UnitName("doc", GraphicsUnit.Document), // made up 
      new UnitName("mm", GraphicsUnit.Millimeter), 
     }; 


    internal UnitName(string name, GraphicsUnit unit) { 
     this.name = name; 
     this.unit = unit; 
    } 
} 

So sieht es aus wie Sie die Einheiten als eine Angabe werden soll:

world | display | px | pt | in | doc | mm 

Sie müssen um einen dieser Werte auf den Größenwert zu setzen. Der Kommentar im Quellcode sagt:

text is expected to have a format like " 8,25pt 
+0

Danke für deine Antwort ... –

Verwandte Themen