Frage

Diese Frage wurde in praktisch jedem Forum, einschließlich des Forums, gestellt hier Aber es gibt keine akzeptablen Antworten, die ich finden kann. Ich fange an zu denken, dass es tatsächlich keine Lösung gibt, und ich muss meinen Code nur in einen Versuch/Catch -Block einwickeln und mich beim Benutzer entschuldigen und sie bitten, eine andere Schriftart zu wählen.

Ich möchte a zeigen FontDialog damit ein Benutzer die Schriftarten auf a ändern kann Chart, Wenn der Benutzer jedoch eine nicht-truetype Schriftart auswählt, wird eine Ausnahme ausgelöst. GDI+ kann nur TrueType -Schriftarten verarbeiten.

Wie kann ich die Schriftarten aus dem Fontdialog filtern, der nicht mit GDI+verwendet werden kann?

War es hilfreich?

Lösung

Die FontDialog -Klasse tut dies bereits und verwendet den API -Aufruf wählen Sie mit der Option cf_ttonly. Dies zwingt den Dialog, nur Schriftarten anzuzeigen, die sich als TrueType -Schriftarten bewerben. Die Links deuten darauf hin, dass es Schriftarten um den Dialog gibt, das bis heute noch nie davon gehört hat. Das macht es ziemlich selten, aber sicherlich nicht unerwartet, es gibt viele Junk -Schriftarten mit schlechten Metadaten.

Es gibt nichts, was Sie tun können, um die Ausnahme zu erfassen. Sie wird in einer Rückruffunktion aufgebracht, die in das .NET -Framework eingebacken ist. Das Umschreiben der Klasse ist eine Option, aber keine angenehme. Das Deinstallieren der Schiedsrichter -Schriftart ist sicherlich die einfache Lösung.

Andere Tipps

Kein wirklich schöner Weg um diesen, außer um es zu versuchen/zu fangen blockiert es

try
{
    if (m_FontDialog.ShowDialog(frmMain.mainForm) == DialogResult.OK)
    {
        //Successful
    }
}
catch (Exception ex)
{
    //Not a truetype font
    MessageBox.Show(frmMain.mainForm, ex.Message + Environment.NewLine + "Font not changed.", "Font Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}

Ich bin mir nicht sicher, ob es funktionieren wird, aber versuchen Sie es zu setzen Fontdialog.Allowsimulations zu FALSCH.

Sie können den benutzerdefinierten fontdialog verfügbar verwenden hier um diese Ausnahme zu überwinden. Es wurde in C#.NET entwickelt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top