Sdílet prostřednictvím


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

  1. 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.

  2. Přidejte do kódu odkaz na Microsoft.Win32 obor názvů.

    using Microsoft.Win32;
    
    Imports Microsoft.Win32
    
  3. 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
    
  4. 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
    
  5. 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
    
  6. Zkompilujte a spusťte kód.

Ruční změna schématu písem v systému Windows XP

  1. 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.

  2. V dialogovém okně Zobrazit vlastnosti klepněte na kartu Vzhled .

  3. 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é