讓的說使用的字體安裝在系統上即時通訊:
new System.Drawing.Font("Arial", 120F);
一切都很好。現在,如果我會使用不存在的字體:
new System.Drawing.Font("IdoNotExistHaHa", 120F);
我沒有得到任何異常。正如我所看到的,如果我使用不存在的字體,我會得到一個標準字體(arial?,不確定)。無論如何,如果找不到字體,我想拋出異常。如何?
讓的說使用的字體安裝在系統上即時通訊:
new System.Drawing.Font("Arial", 120F);
一切都很好。現在,如果我會使用不存在的字體:
new System.Drawing.Font("IdoNotExistHaHa", 120F);
我沒有得到任何異常。正如我所看到的,如果我使用不存在的字體,我會得到一個標準字體(arial?,不確定)。無論如何,如果找不到字體,我想拋出異常。如何?
MSDN說如下:
有關如何構建字體,請參閱如何瞭解更多信息: 構建字體家族和字體。 Windows窗體應用程序支持 TrueType字體和對OpenType字體的支持有限。如果您 嘗試使用不支持的字體,或者字體不 運行應用程序的計算機上安裝的 Microsoft無襯線字體將被取代。
您可以檢查如果字體是做如下更正:
var myFont = new Font(fontName)
if (myFont.Name != fontName)
{
throw new Exception()
}
應該我不試試!myFont.Name.Equals(fontName)? – silla
這將給出相同的結果。所以bascially你可以選擇任何你想要的。儘管我認爲它更清晰!= –
你可以看到它在文檔本身,Font Constructor (String, Single)
Windows窗體應用程序支持TrueType字體,並限制了OpenType字體 支持。如果familyName參數指定了未安裝在機器上運行的應用程序或不支持 一個 字體,Microsoft無襯線將被取代。
總之,默認字體是Microsoft Sans Serif
你可以檢查,看看是否字體是第一次安裝。 從傑夫·希爾曼的答案在這裏:Test if a Font is installed
string fontName = "Consolas";
float fontSize = 12;
Font fontTester = new Font(
fontName,
fontSize,
FontStyle.Regular,
GraphicsUnit.Pixel);
if (fontTester.Name == fontName)
{
// Font exists
}
else
{
// Font doesn't exist
}
很明顯,你可以再拋出一個異常,如果你想(因爲這是你原來的問題),但我建議不要,拋出異常是昂貴的操作,如果你可以更好地處理這個問題。
如果我不使用fontTester.Name.Equals的fontName)? – silla
@silla這是一個不同的問題在一起:)通常==被認爲是字符串可接受的用法;看看:http://blogs.msdn.com/b/csharpfaq/archive/2004/03/29/when-should-i-use-and-when-should-i-use-equals.aspx – HaemEternal
@ Mr.Steak:沒有關係。問題是:爲什麼我沒有得到任何形式不存在的通知,而不是*如何*檢查字體是否存在。這些問題*可能被實現,但並不是在這個問題中隱含地表現出來。 – Tigran
@Tigran - 「我想拋出一個異常,如果有未找到的字體。」因爲一個異常拋出將需要某種形式的測試,如果字體可用的,還有不小的重疊更多。 –
@Tigran我鏈接的問題包含了解決底層問題的方法。問題'如果沒有找到字體,如何拋出異常?' *是*檢查字體是否安裝,然後你可以自己拋出異常。否則,如果OP只對*爲什麼* System.Drawing.Font'的構造函數沒有引發異常感興趣,那麼問題應該被關閉爲'not constructive' – sloth