您見過這樣的例外嗎?
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的私人方法埋葬的,並且無法處理。
由於該錯誤已經存在了多年,但鑑於Windows表單在Microsoft的優先級列表中並不完全很高,因此我懷疑它永遠不會被修復。這是我寧願不重塑的輪子,但是……無論如何,這是。
我實際上還沒有設法找到導致這種類型崩潰的字體,儘管我收到了很多經歷的用戶的自動錯誤報告。如果您知道可以下載的字體,請讓我知道,以便我自己測試。我認為我的版本解決了問題,但是在這一點上,我實際上並不確定。
Cyotek.Windows.Forms.FontDialog組件是替換原始System.Windows.Forms.FontDialog的下降,但是在選擇非真實類型字體時不會發生崩潰。
此版本使用ChooseFont的本機Win32對話框 - 處理Apply事件的掛鉤過程,隱藏顏色組合已直接從原始的託管組件中獲取。
在此存儲庫的一個分支之一中,還有一個完全管理的解決方案。這是不完整的,主要是因為我無法確定哪些字體被設置隱藏了,以及如何使用非標準樣式(例如光)結合家庭。它本身仍然很有趣,展示瞭如何使用EnumFontFamiliesEx等,但是目前,隨著正在進行的工作,它已經擱置了。
有一個Nuget軟件包。
pm> install-package cyotek.windows.forms.fontdialog
FontDialog組件是根據MIT許可證獲得許可的。有關全文,請參見LICENSE.txt 。
有關此控件的更多信息,請參見Cyotek.com上標記為fontdialog的文章。