Domanda

Questa domanda è stata posta in praticamente ogni forum, tra cui qui ma non ci sono risposte accettabili da nessuna parte che posso trovare. Sto cominciando a pensare che v'è in realtà alcuna soluzione e non mi resta che avvolgere il mio codice in un blocco try / catch e chiedere scusa per l'utente e chiedere loro di scegliere un altro tipo di carattere.

voglio mostrare un FontDialog in modo che un utente può modificare i caratteri su un Chart, se l'utente seleziona un carattere non-TrueType, quindi viene generata un'eccezione. GDI + può gestire solo i font TrueType.

Come faccio a filtrare i caratteri dalla FontDialog che non può essere utilizzato con GDI +?

È stato utile?

Soluzione

La classe FontDialog già fa questo, si utilizza la chiamata API ChooseFont () con l'opzione CF_TTONLY. Che costringe il dialogo ai soli font di visualizzazione che si pubblicizzano come i font TrueType. I collegamenti suggerisce che ci sono tipi di carattere di tutto che ingannare la finestra di dialogo, mai sentito parlare prima fino ad oggi. Che lo rende abbastanza raro ma non certo inaspettata, ci sono un sacco di tipi di carattere spazzatura in giro con cattive metadati.

Non è qualcosa che puoi fare per catturare l'eccezione, si è sollevata in una funzione di callback che viene cotto nel framework .NET. Riscrivere la classe è una possibilità, ma non è piacevole. Disinstallare il carattere piantagrane è certamente la soluzione facile.

Altri suggerimenti

Nessun vero bel modo intorno a questo, tranne per provare / blocco catch it

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

Non sono sicuro se funzionerà, ma tenta di impostare FontDialog.AllowSimulations per false .

È possibile utilizzare l'usanza FontDialog disponibili qui per superare questa eccezione. E 'sviluppato in C # .Net.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top