このような例外を見たことがありますか?
System.ArgumentException: Only TrueType fonts are supported. This is not a TrueType font.
at System.Drawing.Font.FromLogFont(Object lf, IntPtr hdc)
at System.Windows.Forms.FontDialog.UpdateFont(LOGFONT lf)
at System.Windows.Forms.FontDialog.RunDialog(IntPtr hWndOwner)
at System.Windows.Forms.CommonDialog.ShowDialog(IWin32Window owner)
この例外は、 System.Windows.Forms.FontDialogコンポーネントを使用するとスローされ、無効なフォントを選択します。この例外はFontDialogのプライベートな方法に埋もれており、処理されていないため、それについてはできません。
バグは修正されずに何年もそこにあったので、Microsoftの優先順位のリストでWindowsフォームが正確ではないという事実を考えると、私はそれが決して修正されないと思います。これは私が再発明したくない1つのホイールですが、...ここではとにかく。
私は実際にこのタイプのクラッシュを引き起こすフォントを見つけることができませんでしたが、それを経験しているユーザーからの自動エラーレポートはかなりあります。ダウンロード可能なこのようなフォントを知っている場合は、これを自分でテストできるようにお知らせください。私のバージョンは問題を修正していると思いますが、この時点では実際には確かではありません。
Cyotek.Windows.Forms.FontDialogコンポーネントは、元のSystem.Windows.Forms.FontDialogの交換の低下ですが、非真実型フォントを選択するときに発生するクラッシュはありません。
このバージョンは、 ChooseFontを介してネイティブWin32ダイアログを使用します - Applyイベントを処理するフック手順と色のコンボボックスを隠すことは、元の管理されたコンポーネントから直接取得されます。
また、このリポジトリのブランチの1つに埋め込まれた完全に管理されたソリューションもあります。主に、どのフォントが設定によって隠されているか、そして家族を光などの非標準スタイルと組み合わせる方法を判断できなかったため、それは不完全です。それ自体はまだ興味深いものであり、 EnumFontFamiliesExなどの使用方法を示していますが、今のところは進行中の作業として保留中です。
Nugetパッケージが利用可能です。
PM> install-package cyotek.windows.forms.fontdialog
FontDialogコンポーネントは、MITライセンスの下でライセンスされています。全文については、 LICENSE.txt参照してください。
このコントロールの詳細については、cyotek.comのfontdialogでタグ付けされた記事を参照してください。