フォント処理 (Visual Basic 6.0 ユーザー向け)

更新 : 2007 年 11 月

ここでは、Visual Basic 6.0 と Visual Basic 2008 のフォント処理テクニックを比較します。

概念の違い

Visual Basic 6.0 では、2 つの異なる方法でフォントを取り扱います。フォームおよびコントロールのフォント プロパティを使用する方法と、stdFont オブジェクトを使用する方法です。

Visual Basic 2008 では、Font オブジェクトは System.Drawing.Font の 1 つだけです。フォームまたはコントロールの Font プロパティは、Font オブジェクトを引数として受け取ります。

フォント プロパティの設定

Visual Basic 6.0 のフォント プロパティは、stdFont オブジェクトを割り当てるか、またはプロパティをコントロールに直接設定して、実行時に設定できます。どちらの方法を使っても結果は同じです。

Visual Basic 2008 では、コントロールの Font プロパティは、実行時には読み取り専用です。プロパティを直接設定することはできません。プロパティを設定するたびに、新しい Font オブジェクトのインスタンスを生成する必要があります。

フォントの継承

Visual Basic 6.0 では、コントロールまたはフォームごとにフォント プロパティを個別に設定する必要があります。stdFont オブジェクトを使うことで処理は簡単になりますが、それでもコードは必要です。

Visual Basic 2008 では、子オブジェクトに対して明示的にフォント プロパティが設定されている場合を除き、親のフォント プロパティが自動的に継承されます。たとえば、フォーム上に 2 つのラベル コントロールがある場合に、フォームのフォント プロパティを Arial に変更すると、ラベル コントロールのフォントも Arial に変更されます。その後で一方のラベルのフォントを Times Roman に変更すると、それ以降フォームのフォントを変更しても、そのラベルのフォントには影響しません。

フォントの互換性

Visual Basic 6.0 では下位互換性のためにラスタ フォントがサポートされていますが、Visual Basic 2008 では TrueType フォントと OpenType フォントだけがサポートされています。

フォントの列挙

Visual Basic 6.0 では、Screen.FontCount プロパティと共に Screen.Fonts コレクションを使用して、使用できる画面フォントを列挙できます。

Visual Basic 2008 には Screen オブジェクトがありません。システムで使用できるフォントを列挙するには、System.Drawing.FontFamily 名前空間を使用する必要があります。

メモ :

Visual Basic 6.0 では、すべての種類のフォントが列挙されます。Visual Basic 2008 では、TrueType フォントと OpenType フォントだけがサポートされています。その他の種類のフォントは列挙されません。また、Visual Basic 6.0 ではフォント ファミリ内での文字セットの各バージョン (Arial、Arial Baltic、Arial Greek など) が列挙されますが、Visual Basic 2008 ではフォント ファミリだけが列挙されます。

フォントを扱うコードの変更

次のコード例は、Visual Basic 6.0 と Visual Basic 2008 のコーディング テクニックの違いを示しています。

フォント プロパティを設定するコードの変更

次のコード例は、フォント プロパティを実行時に設定する方法を示しています。Visual Basic 6.0 ではコントロール上でプロパティを直接設定できますが、Visual Basic 2008 では、プロパティを設定する必要があるたびに、新しい Font オブジェクトを作成して、それをコントロールに割り当てる必要があります。

' Visual Basic 6.0 
' Set font properties directly on the control.
Label1.FontBold = True
' Create a stdFont object.
Dim f As New stdFont
' Set the stdFont object to the Arial font.
f.Name = "Arial"
' Assign the stdFont to the control's font property.
Set Label1.Font = f
' You can still change properties at run time.
Label1.FontBold = True
Label1.FontItalic = True
' Visual Basic
' Create a new Font object  Name and Size are required.
Dim f As New System.Drawing.Font("Arial", 10)
' Assign the font to the control
Label1.Font = f
' To set additional properties, you must create a new Font object.
Label1.Font = New System.Drawing.Font(Label1.Font, FontStyle.Bold Or FontStyle.Italic)

フォントを列挙するコードの変更

次のコード例は、コンピュータにインストールされているフォントの一覧を ListBox コントロールに設定する方法を示しています。

メモ :

Visual Basic 6.0 では、すべての種類のフォントが列挙されます。Visual Basic 2008 では、TrueType フォントと OpenType フォントだけがサポートされています。その他の種類のフォントは列挙されません。また、Visual Basic 6.0 ではフォント ファミリ内での文字セットの各バージョン (Arial、Arial Baltic、Arial Greek など) が列挙されますが、Visual Basic 2008 ではフォント ファミリだけが列挙されます。

' Visual Basic 6.0 
Dim i As Integer
For i = 0 To Screen.FontCount – 1
   List1.AddItem Screen.Fonts(i)
Next i
' Visual Basic 
Dim ff As FontFamily
For Each ff In System.Drawing.FontFamily.Families
  listBox1.Items.Add(ff.Name)
Next

アップグレード メモ

Visual Basic 6.0 アプリケーションを Visual Basic 2008 にアップグレードすると、フォントを扱うすべてのコードは、新しい Font オブジェクトを使うように更新されます。

Visual Basic 2008 でのフォントの継承によって、アプリケーションの表示に予期しない変化が生じる可能性があります。変換したアプリケーションをチェックして、フォントをフォーム レベルまたはコンテナ レベルで明示的に設定するコードがあるかどうかを確認し、親から継承されるフォントが子コントロールにとって適切ではない場合にフォントを変更する必要があるかどうかを確認してください。

アップグレードを行うとき、ラスタ フォントは既定の OpenType フォントである Microsoft Sans Serif に変換されます。太字や斜体などの書式は保持されません。詳細については、「OpenType フォントと TrueType フォントだけがサポートされている」を参照してください。

フォントを列挙するコードがアプリケーションにある場合、アップグレードしたアプリケーションではラスタ フォントは列挙されません。また、列挙されるのは、文字セットの各バージョンではなく、フォント ファミリです。

参照

参照

Font

FontFamily.Families

その他の技術情報

Windows フォーム コントロール (Visual Basic 6.0 ユーザー向け)