Windows オペレーティング システムでは、ユーザーはシステム全体のフォント設定を変更して、既定のフォントを大きくまたは小さく表示できます。 これらのフォント設定を変更することは、視覚に障碍があり、画面のテキストを読むのに大きな種類が必要なユーザーにとって重要です。 フォント パターンが変更されるたびにフォームのサイズと含まれるすべてのテキストを増減することで、これらの変更に対応するように Windows フォーム アプリケーションを調整できます。 フォームでフォント サイズの変更に動的に対応する場合は、フォームにコードを追加できます。
通常、Windows フォームで使用される既定のフォントは、Microsoft.Win32の GetStockObject(DEFAULT_GUI_FONT) 名前空間呼び出しによって返されるフォントです。 この呼び出しによって返されるフォントは、画面の解像度が変更されたときにのみ変更されます。 次の手順に示すように、コードは既定のフォントを IconTitleFont に変更して、フォント サイズの変更に対応する必要があります。
デスクトップ フォントを使用し、フォント パターンの変更に対応するには
フォームを作成し、必要なコントロールを追加します。 詳細については、「
方法: Windows フォームで使用するコマンド ライン およびコントロールから Windows フォーム アプリケーションを作成する」を参照してください。 Microsoft.Win32 名前空間への参照をコードに追加します。
using Microsoft.Win32;Imports Microsoft.Win32フォームのコンストラクターに次のコードを追加して、必要なイベント ハンドラーをフックし、フォームで使用されている既定のフォントを変更します。
this.Font = SystemFonts.IconTitleFont; SystemEvents.UserPreferenceChanged += new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged); this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);Public Sub New() ' This call is required by the Windows Form Designer. InitializeComponent() ' Add any initialization after the InitializeComponent() call. AddHandler SystemEvents.UserPreferenceChanged, New UserPreferenceChangedEventHandler(AddressOf SystemEvents_UserPreferenceChangesEventHandler) End SubUserPreferenceChanged カテゴリが変更されたときにフォームを自動的にスケーリングする Window イベントのハンドラーを実装します。
void SystemEvents_UserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e) { if (e.Category == UserPreferenceCategory.Window) { this.Font = SystemFonts.IconTitleFont; } }Private Sub SystemEvents_UserPreferenceChangesEventHandler(ByVal sender As Object, ByVal e As UserPreferenceChangedEventArgs) If (e.Category = UserPreferenceCategory.Window) Then Me.Font = SystemFonts.IconTitleFont End If End Sub最後に、FormClosing イベント ハンドラーをデタッチする UserPreferenceChanged イベントのハンドラーを実装します。
重要
このコードを含めそうしないと、アプリケーションがメモリをリークします。
void Form1_FormClosing(object sender, FormClosingEventArgs e) { SystemEvents.UserPreferenceChanged -= new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged); }Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing RemoveHandler SystemEvents.UserPreferenceChanged, New UserPreferenceChangedEventHandler(AddressOf SystemEvents_UserPreferenceChangesEventHandler) End Subコードをコンパイルして実行します。
Windows XP でフォント パターンを手動で変更するには
Windows フォーム アプリケーションの実行中に、Windows デスクトップを右クリックし、ショートカット メニューから [プロパティ]
選択します。 [表示プロパティ] ダイアログ ボックスで、[外観] タブをクリックします。
[フォント サイズ ドロップダウン リスト ボックスから、新しいフォント サイズを選択します。
フォームがデスクトップ フォント パターンの実行時の変更に対応するようになったことがわかります。 ユーザーが Normal、Large Fonts、および Extra Large Fontsの間で変更すると、フォームのフォントが変更され、正しく拡大縮小されます。
例
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;
namespace WinFormsAutoScaling
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.Font = SystemFonts.IconTitleFont;
SystemEvents.UserPreferenceChanged += new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged);
this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
}
void SystemEvents_UserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e)
{
if (e.Category == UserPreferenceCategory.Window)
{
this.Font = SystemFonts.IconTitleFont;
}
}
void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
SystemEvents.UserPreferenceChanged -= new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged);
}
}
}
Imports Microsoft.Win32
Public Class Form1
Public Sub New()
' This call is required by the Windows Form Designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
AddHandler SystemEvents.UserPreferenceChanged, New UserPreferenceChangedEventHandler(AddressOf SystemEvents_UserPreferenceChangesEventHandler)
End Sub
Private Sub SystemEvents_UserPreferenceChangesEventHandler(ByVal sender As Object, ByVal e As UserPreferenceChangedEventArgs)
If (e.Category = UserPreferenceCategory.Window) Then
Me.Font = SystemFonts.IconTitleFont
End If
End Sub
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
RemoveHandler SystemEvents.UserPreferenceChanged, New UserPreferenceChangedEventHandler(AddressOf SystemEvents_UserPreferenceChangesEventHandler)
End Sub
End Class
このコード例のコンストラクターには、Visual Studio で新しい Windows フォーム プロジェクトを作成するときに定義される InitializeComponentの呼び出しが含まれています。 コマンド ラインでアプリケーションをビルドする場合は、このコード行を削除します。
こちらも参照ください
.NET Desktop feedback