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
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).
Dodaj odwołanie do Microsoft.Win32 przestrzeni nazw do kodu.
using Microsoft.Win32;
Imports Microsoft.Win32
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
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
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
Skompiluj i uruchom kod.
Aby ręcznie zmienić schemat czcionek w systemie Windows XP
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.
W oknie dialogowym Właściwości wyświetlania kliknij kartę Wygląd.
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 InitializeComponent
metody , 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ż
.NET Desktop feedback