Udostępnij za pośrednictwem


Porady: reagowanie na zmiany schematu czcionek w aplikacji Windows Forms

W systemach operacyjnych Windows użytkownik może zmienić ustawienia czcionki dla całego systemu, aby czcionka domyślna wydawała się większa lub mniejsza. Zmiana tych ustawień czcionki ma kluczowe znaczenie dla użytkowników, którzy są niedowidzeni i wymagają większego typu odczytywania tekstu na ekranach. Aplikację Windows Forms można dostosować tak, aby reagowała na te zmiany, zwiększając lub zmniejszając rozmiar formularza oraz cały zawarty tekst za każdym razem, gdy zmienia się schemat czcionek. Jeśli chcesz, aby formularz uwzględniał zmiany w rozmiarach czcionek dynamicznie, możesz dodać kod do formularza.

Zazwyczaj czcionką domyślną używaną przez formularze systemu Windows jest czcionka zwracana przez Microsoft.Win32 wywołanie przestrzeni nazw na GetStockObject(DEFAULT_GUI_FONT). Czcionka zwrócona przez to wywołanie zmienia się tylko wtedy, gdy rozdzielczość ekranu ulegnie zmianie. Jak pokazano w poniższej procedurze, kod musi zmienić czcionkę domyślną, aby IconTitleFont reagować na zmiany rozmiaru czcionki.

Aby użyć czcionki pulpitu i odpowiedzieć na zmiany schematu czcionek

  1. Utwórz formularz i dodaj do niego kontrolki, które chcesz. Aby uzyskać więcej informacji, zobacz How to: Create a Windows Forms Application from the Command Line and Controls to Use on Windows Forms (Instrukcje: tworzenie aplikacji formularzy systemu Windows na podstawie wiersza polecenia i kontrolek do użycia w formularzach systemu Windows).

  2. Dodaj odwołanie do Microsoft.Win32 przestrzeni nazw do kodu.

    using Microsoft.Win32;
    
    Imports Microsoft.Win32
    
  3. Dodaj następujący kod do konstruktora formularza, aby podłączyć wymagane programy obsługi zdarzeń i zmienić domyślną czcionkę używaną dla formularza.

    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. Zaimplementuj UserPreferenceChanged program obsługi zdarzenia, który powoduje automatyczne skalowanie formularza po Window zmianie kategorii.

    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. Na koniec zaimplementuj program obsługi zdarzenia FormClosing , który odłącza procedurę UserPreferenceChanged obsługi zdarzeń.

    Ważne

    Nie można dołączyć tego kodu, co spowoduje przeciek pamięci aplikacji.

    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. Skompiluj i uruchom kod.

Aby ręcznie zmienić schemat czcionek w systemie Windows XP

  1. Gdy aplikacja Windows Forms jest uruchomiona, kliknij prawym przyciskiem myszy pulpit systemu Windows i wybierz polecenie Właściwości z menu skrótów.

  2. W oknie dialogowym Właściwości wyświetlania kliknij kartę Wygląd.

  3. Z listy rozwijanej Rozmiar czcionki wybierz nowy rozmiar czcionki.

    Zauważysz, że formularz reaguje teraz na zmiany czasu wykonywania w schemacie czcionek pulpitu. Gdy użytkownik zmieni się między normalnymi, dużymi czcionkami i dodatkowymi dużymi czcionkami, formularz zmienia czcionkę i skaluje się poprawnie.

Przykład

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 w tym przykładzie kodu zawiera wywołanie InitializeComponentmetody , która jest zdefiniowana podczas tworzenia nowego projektu Windows Forms w programie Visual Studio. Usuń ten wiersz kodu, jeśli tworzysz aplikację w wierszu polecenia.

Zobacz też