c#fontdialogの設定TrueTypeフォントのみを表示します
-
25-10-2019 - |
質問
この質問は、実質的にすべてのフォーラムで尋ねられています。 ここ しかし、私が見つけることができるどこにも受け入れられる答えはありません。実際には解決策がないと考え始めており、トライ/キャッチブロックでコードをラップしてユーザーに謝罪し、別のフォントを選択するように依頼する必要があります。
見せたい FontDialog
ユーザーがフォントを変更できるように Chart
, ただし、ユーザーが非トルエタイプフォントを選択した場合、例外がスローされます。 GDI+はTrueTypeフォントのみを処理できます。
gdi+では使用できないfontdialogからフォントをフィルタリングするにはどうすればよいですか?
解決
fontdialogクラスは既にこれを行っており、CF_Ttonlyオプションでchoicefont()API呼び出しを使用します。ダイアログは、TrueTypeフォントとして自分自身を宣伝するフォントのみを表示するように強制します。リンクは、ダイアログの愚か者の周りにフォントがあることを示唆しています。今日まで聞いたことはありません。それは非常にまれですが、確かに予想外ではありません。悪いメタデータを備えたジャンクフォントがたくさんあります。
例外をキャッチするためにできることは何もありません。それは、.NETフレームワークに焼き付けられたコールバック関数で提起されています。クラスの書き換えはオプションですが、心地よいものではありません。トラブルメーカーフォントのアンインストールは、確かに簡単なソリューションです。
他のヒント
ブロックする/キャッチすることを除いて、これの周りの本当の良い方法はありません
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);
}
それが機能するかどうかはわかりませんが、設定してみてください fontdialog.allowsimulation に 間違い.
利用可能なカスタムfontdialogを使用できます ここ この例外を克服するため。 C#.netで開発されています。