Postupy: Reakce na změny schématu písem v aplikaci Windows Forms
V operačních systémech Windows může uživatel změnit nastavení písma v celém systému, aby se výchozí písmo zobrazoval větší nebo menší. Změna těchto nastavení písma je důležitá pro uživatele, kteří jsou zrakově postižení a vyžadují větší typ čtení textu na obrazovkách. Aplikaci Windows Forms můžete upravit tak, aby na tyto změny reagovala zvětšením nebo zmenšením velikosti formuláře a veškerého textu, kdykoli se schéma písma změní. Pokud chcete, aby formulář vyhovoval změnám velikostí písma dynamicky, můžete do formuláře přidat kód.
Obvykle je výchozím písmem používaným ve Windows Forms písmo vrácené voláním oboru názvů Microsoft.Win32 na GetStockObject(DEFAULT_GUI_FONT)
. Písmo vrácené tímto voláním se změní pouze při změně rozlišení obrazovky. Jak je znázorněno v následujícím postupu, váš kód musí změnit výchozí písmo na IconTitleFont, aby reagovalo na změny velikosti písma.
Použití písma pro plochu a reagování na změny schématu písem
Vytvořte formulář a přidejte do něj požadované ovládací prvky. Další informace najdete v tématu Postupy: Vytvoření aplikace Windows Forms z příkazového řádku a ovládacích prvků , které se mají použít ve Windows Forms.
Přidejte do kódu odkaz na obor názvů Microsoft.Win32.
using Microsoft.Win32;
Imports Microsoft.Win32
Do konstruktoru formuláře přidejte následující kód, který připojí požadované obslužné rutiny událostí a změní výchozí písmo použité pro formulář.
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
Implementujte obslužnou rutinu pro událost UserPreferenceChanged, která způsobí automatické škálování formuláře při změně Window kategorie.
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
Nakonec implementujte obslužnou rutinu pro událost FormClosing, která odpojí obslužnou rutinu událostí UserPreferenceChanged.
Důležitý
Nepřidání tohoto kódu způsobí únik paměti ve vaší aplikaci.
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
Zkompilujte a spusťte kód.
Ruční změna schématu písem v systému Windows XP
Když je aplikace Windows Forms spuštěná, klikněte pravým tlačítkem myši na plochu Windows a v místní nabídce zvolte Vlastnosti.
V dialogovém okně Vlastnosti zobrazení klepněte na kartu Vzhled.
V rozevíracím seznamu Velikost písma vyberte novou velikost písma.
Všimněte si, že formulář teď reaguje na změny během provozu ve schématu písem plochy. Když se uživatel změní mezi Normální, Velká Písmaa Extra Velká Písma, formulář změní písmo a měřítko správně.
Příklad
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
Konstruktor v tomto příkladu kódu obsahuje volání InitializeComponent
, která je definována při vytváření nového projektu Windows Forms v sadě Visual Studio. Pokud vytváříte aplikaci na příkazovém řádku, odeberte tento řádek kódu.
Viz také
.NET Desktop feedback