幾乎在每個論壇中都會問這個問題,包括here,但是我找不到任何可接受的答案。我開始認爲實際上沒有解決方案,我只需將我的代碼封裝在try/catch塊中,並向用戶道歉並要求他們選擇另一種字體。C#將FontDialog設置爲僅顯示TrueType字體
我想顯示一個FontDialog
,以便用戶可以更改Chart
上的字體,但是如果用戶選擇非TrueType字體,則會拋出異常。 GDI +只能處理TrueType字體。
如何從FontDialog中過濾不能與GDI +一起使用的字體?
幾乎在每個論壇中都會問這個問題,包括here,但是我找不到任何可接受的答案。我開始認爲實際上沒有解決方案,我只需將我的代碼封裝在try/catch塊中,並向用戶道歉並要求他們選擇另一種字體。C#將FontDialog設置爲僅顯示TrueType字體
我想顯示一個FontDialog
,以便用戶可以更改Chart
上的字體,但是如果用戶選擇非TrueType字體,則會拋出異常。 GDI +只能處理TrueType字體。
如何從FontDialog中過濾不能與GDI +一起使用的字體?
FontDialog類已經這樣做了,它使用帶有CF_TTONLY選項的ChooseFont()API調用。這會強制對話框僅顯示將自己宣傳爲TrueType字體的字體。這些鏈接暗示着周圍的字體愚弄了對話,直到今天才從未聽說過。這使得它非常罕見,但肯定不會出乎意料,有很多垃圾字體與壞的元數據。
沒有任何東西可以用來捕獲異常,它是在.NET框架中的回調函數中引發的。重寫課程是一種選擇,但不是一個愉快的選擇。卸載troublemaker字體當然是一個簡單的解決方案。
感謝Hans。我正在運行Win7 x64,僅安裝Adobe Photoshop和Mathematica字體;其餘的都是股票字體。大約一半的字體導致了這種例外,所以不幸的是,卸載麻煩的字體不是一種選擇。 – Ozzah 2011-06-13 23:27:14
我不確定它是否可以正常工作,但是嘗試將FontDialog.AllowSimulations設置爲false。
這並沒有解決問題。 – jHilscher 2016-08-26 06:56:19
圍繞這一除了嘗試沒有真正的好方法/ catch塊就
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);
}
您可以使用可用here定製FontDialog類克服這種例外。它是用C#.Net開發的。
實現您自己的Font選擇器有多難。對於最重要的選項可能需要幾個小時,但不應花費幾個星期。 – CodingBarfield 2011-06-10 07:09:26
@David這真的取決於他在用什麼。 – CodingBarfield 2011-06-10 12:37:59