Postupy: Odpověď 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 model 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.
Výchozí písmo používané model Windows Forms je písmo vrácené Microsoft.Win32 voláním GetStockObject(DEFAULT_GUI_FONT)
oboru názvů . 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, aby IconTitleFont reagoval na změny velikosti písma.
Použití písma na ploše a reakce na změny schématu písem
Vytvořte formulář a přidejte do něj požadované ovládací prvky. Další informace naleznete v tématu Postupy: Vytvoření aplikace model Windows Forms z příkazového řádku a ovládacích prvků, které se mají použít na model Windows Forms.
Přidejte do kódu odkaz na Microsoft.Win32 obor názvů.
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 UserPreferenceChanged události, která způsobí automatické škálování formuláře při Window změně 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 FormClosing události, která odpojila obslužnou rutinu UserPreferenceChanged události.
Důležité
Selhání zahrnutí tohoto kódu způsobí, že aplikace nevracela paměť.
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 model Windows Forms spuštěná, klikněte pravým tlačítkem na plochu Windows a v místní nabídce zvolte Vlastnosti.
V dialogovém okně Zobrazit vlastnosti 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 za běhu v schématu písem plochy. Když se uživatel změní mezi normálními, velkými písmy a extra velkými písmy, formulář změní písmo a škáluje se 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áno při vytvoření nového model Windows Forms projektu v sadě Visual Studio. Pokud vytváříte aplikaci na příkazovém řádku, odeberte tento řádek kódu.
Viz také
.NET Desktop feedback
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro