Sdílet prostřednictvím


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

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

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

    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 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
    
  5. 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
    
  6. Zkompilujte a spusťte kód.

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

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

  2. V dialogovém okně Vlastnosti zobrazení 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 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é