Ich habe nach einer Möglichkeit gesucht, die gültigen Schriftstile für eine bestimmte Schriftart mit dem .Net-Framework aufzulisten (auch wenn ich gdi32 oder eine andere API pinnen muss), da nicht alle Schriftarten in den System.Drawing.FontStyle fallen Aufzählungswerte (Fett, Kursiv, Normal, Strikeout, Unterstrichen). Ein perfektes Beispiel für eine Schriftart, die nicht in die Rechnung passt, ist Segoe UI, eine TrueType-Microsoft-Schriftart mit den Schriftarten Regular, Semibold, Light, Bold, Italic und BoldItalic. Ein weiteres Beispiel ist Arial mit den folgenden Optionen: Normal, Schmal, Kursiv, Fett, Fett Kursiv, Schmal Fett, Schmal Fett Kursiv und Schmal Kursiv..Net enumerate Winforms Schriftarten?
In Windows 7 (wahrscheinlich Vista, aber ich habe keine Maschine zu überprüfen), wenn Sie den Explorer öffnen und zu% SystemRoot% \ Fonts durchsuchen, sehen Sie eine Spalte namens "Font style", die alle auflistet von den verfügbaren Stilen für jede Schriftart, was mir sagt, dass es definitiv eine Möglichkeit gibt, dies zu tun, zumindest durch API-Aufrufe.
Letztendlich möchte ich die FontFamily-Liste aufzählen und dann jeden Schriftstil für jede Familie auflisten. Im Folgenden finden Sie Beispielcode für die Auflistung aller Schriftfamilien. Wenn jemand Hilfe bei der Auflistung der verfügbaren Schriftarten für jede Familie geben könnte, würde ich mich darüber freuen. Wenn ich das falsch mache, bin ich definitiv offen für Vorschläge.
Drawing.Text.InstalledFontCollection ifc = new Drawing.Text.InstalledFontCollection();
foreach (FontFamily ff in ifc.Families)
{
Console.WriteLine(ff.ToString());
// Something like this would be nice, but AFAIK nothing similar exists
/*
foreach (FontStyle style in ff.Styles)
Console.WriteLine(style.ToString());
*/
}
Eine Sache zu beachten: Ein anderes Beispiel, das zeigt, was ich tun möchte, wäre einfach das Textwerkzeug in Photoshop zu öffnen, das eine separate Dropdown-Liste mit allen Schriftstilen enthält. Die Art, wie mspaint es tut, wo es die speziellen Familien trennt (Segoe UI Light, Segoe UI Semibold), wäre ebenfalls akzeptabel, aber so funktioniert InstalledFontCollection anscheinend nicht, so dass dieser Weg möglicherweise über API-Aufrufe vollständig erfolgen muss. – tcnolan
Ich habe hier falsch verstanden ... die Art, wie mspaint funktioniert, ist eigentlich genau so, wie mein Beispielcode funktioniert. Das ist _not_ tatsächlich, was ich suche. Entschuldigung ... Ich denke nicht 100% klar. O_O – tcnolan
Ich musste schon seit einiger Zeit eine Lösung in Bezug auf genau diese Sache abschließen - Ihre Frage veranlasst mich, dies zu tun. Meine Lösung verwendet nicht "EnumFontFamiliesEx" - vielmehr liest es die Registrierung und durchläuft dann alle Schriftarten, um sie und ihre Informationen zu finden, inkl. Stil (d. H. Unterfamilie). Ich mache das, weil ich direkt auf die physische Schriftart zugreifen muss, nachdem ich die richtige gefunden habe, um sie in mein Programm einzubetten. Oh, und ich mache es in VB.NET statt C#. Sobald ich es habe, poste ich den Code. –