2012-09-27 60 views
0

可能重複:
Test if a Font is installed如果使用不存在的字體,爲什麼沒有例外?

讓的說使用的字體安裝在系統上即時通訊:

new System.Drawing.Font("Arial", 120F); 

一切都很好。現在,如果我會使用不存在的字體:

new System.Drawing.Font("IdoNotExistHaHa", 120F); 

我沒有得到任何異常。正如我所看到的,如果我使用不存在的字體,我會得到一個標準字體(arial?,不確定)。無論如何,如果找不到字體,我想拋出異常。如何?

+1

@ Mr.Steak:沒有關係。問題是:爲什麼我沒有得到任何形式不存在的通知,而不是*如何*檢查字體是否存在。這些問題*可能被實現,但並不是在這個問題中隱含地表現出來。 – Tigran

+0

@Tigran - 「我想拋出一個異常,如果有未找到的字體。」因爲一個異常拋出將需要某種形式的測試,如果字體可用的,還有不小的重疊更多。 –

+0

@Tigran我鏈接的問題包含了解決底層問題的方法。問題'如果沒有找到字體,如何拋出異常?' *是*檢查字體是否安裝,然後你可以自己拋出異常。否則,如果OP只對*爲什麼* System.Drawing.Font'的構造函數沒有引發異常感興趣,那麼問題應該被關閉爲'not constructive' – sloth

回答

2

MSDN說如下:

有關如何構建字體,請參閱如何瞭解更多信息: 構建字體家族和字體。 Windows窗體應用程序支持 TrueType字體和對OpenType字體的支持有限。如果您 嘗試使用不支持的字體,或者字體不 運行應用程序的計算機上安裝的 Microsoft無襯線字體將被取代。

您可以檢查如果字體是做如下更正:

var myFont = new Font(fontName) 
if (myFont.Name != fontName) 
{ 
    throw new Exception() 
} 
+0

應該我不試試!myFont.Name.Equals(fontName)? – silla

+0

這將給出相同的結果。所以bascially你可以選擇任何你想要的。儘管我認爲它更清晰!= –

2

你可以看到它在文檔本身,Font Constructor (String, Single)

Windows窗體應用程序支持TrueType字體,並限制了OpenType字體 支持。如果familyName參數指定了未安裝在機器上運行的應用程序或不支持 一個 字體,Microsoft無襯線將被取代。

總之,默認字體是Microsoft Sans Serif

1

你可以檢查,看看是否字體是第一次安裝。 從傑夫·希爾曼的答案在這裏: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 
} 

很明顯,你可以再拋出一個異常,如果你想(因爲這是你原來的問題),但我建議不要,拋出異常是昂貴的操作,如果你可以更好地處理這個問題。

+0

如果我不使用fontTester.Name.Equals的fontName)? – silla

+0

@silla這是一個不同的問題在一起:)通常==被認爲是字符串可接受的用法;看看:http://blogs.msdn.com/b/csharpfaq/archive/2004/03/29/when-should-i-use-and-when-should-i-use-equals.aspx – HaemEternal

相關問題