如何:回應 Windows Forms 應用程式中的字型配置變更
在 Windows 作業系統中,使用者可以變更全系統字型設定,讓預設字型顯示更大或更小。 變更這些字型設定對於視覺受損的使用者而言非常重要,而且需要較大的類型才能閱讀其螢幕上的文字。 只要字型配置變更,您可以調整 Windows Forms 應用程式以回應這些變更,方法是增加或減少表單的大小和所有包含的文字。 如果您想要讓表單動態容納字型大小的變更,您可以將程式碼新增至表單。
一般而言,Windows Forms 所使用的預設字型是命名空間呼叫 GetStockObject(DEFAULT_GUI_FONT)
所傳回的 Microsoft.Win32 字型。 此呼叫所傳回的字型只會在螢幕解析度變更時變更。 如下列程式所示,您的程式碼必須變更預設字型, IconTitleFont 以回應字型大小的變更。
若要使用桌面字型並回應字型配置變更
建立表單,並新增您想要的控制項。 如需詳細資訊,請參閱 How to: Create a Windows Forms Application from the Command Line and Controls to Use on Windows Forms 。
將命名空間的 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 Sub
實作 事件處理常式, UserPreferenceChanged 讓表單在類別變更時 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
最後,為中斷連結 UserPreferenceChanged 事件處理常式的事件實作 FormClosing 處理常式。
重要
無法包含此程式碼會導致應用程式流失記憶體。
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 Forms 應用程式執行時,以滑鼠右鍵按一下 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
此程式碼範例中的建構函式包含 對 InitializeComponent
的呼叫,會在您在 Visual Studio 中建立新的 Windows Forms 專案時定義。 如果您要在命令列上建置應用程式,請移除這一行程式碼。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應