1

重複の可能性:
フォントがインストールされているかどうかをテストします

システムにインストールされているフォントを使用しているとしましょう。

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

すべて順調。ここで、存在しないフォントを使用する場合:

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

例外はありません。ご覧のとおり、存在しないフォントを使用すると、標準フォントが使用されます(arial ?、わからない)。いずれにせよ、フォントが見つからない場合は例外をスローしたいと思います。方法?

4

3 に答える 3

3

MSDNは次のように言っています:

フォントを作成する方法の詳細については、「方法:フォントファミリとフォントを作成する」を参照してください。WindowsフォームアプリケーションはTrueTypeフォントをサポートし、OpenTypeフォントのサポートは制限されています。サポートされていないフォントを使用しようとした場合、またはアプリケーションを実行しているマシンにフォントがインストールされていない場合は、MicrosoftSansSerifフォントに置き換えられます。

次のようにして、フォントが正しいかどうかを確認できます。

var myFont = new Font(fontName)
if (myFont.Name != fontName ) 
{ 
    throw new Exception()
} 
于 2012-09-27T07:22:58.020 に答える
2

ドキュメント自体、 Font Constructor(String、Single)で確認できます。

WindowsフォームアプリケーションはTrueTypeフォントをサポートし、OpenTypeフォントのサポートは制限されています。familyNameパラメーターで、アプリケーションを実行しているマシンにインストールされていないフォント、またはサポートされていないフォントが指定されている場合は、MicrosoftSansSerifに置き換えられます。

要するに、デフォルトのフォントはMicrosoft Sans Serif

于 2012-09-27T07:20:49.437 に答える
1

フォントが最初にインストールされているかどうかを確認できます。ここでのJeffHillmanの回答から:フォントがインストールされているかどうかをテストします

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
}

もちろん、必要に応じて例外をスローすることもできます(これは元の質問です)が、そうしないことをお勧めしますが、例外をスローすることは、問題をより適切に処理できる場合、コストのかかる操作です。

于 2012-09-27T07:22:09.533 に答える