Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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 wywołanie Microsoft.Win32 przestrzeni nazw do 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ą na IconTitleFont, aby odpowiedzieć na zmiany rozmiaru czcionki.
Aby użyć czcionki komputerowej i reagować na zmiany schematu czcionek
Utwórz formularz i dodaj do niego kontrolki, które chcesz. Aby uzyskać więcej informacji, zajrzyj do "Jak: Utworzyć aplikację Windows Forms z linii poleceń" oraz "Kontrolki do użycia w Windows Forms".
Dodaj odwołanie do przestrzeni nazw Microsoft.Win32 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 procedurę obsługi dla zdarzenia UserPreferenceChanged, które powoduje automatyczne skalowanie formularza po zmianie kategorii Window.
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 program obsługi zdarzeń UserPreferenceChanged.
Ważne
Niewłączenie tego kodu spowoduje przeciek pamięci w 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 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 teraz reaguje na dynamiczne zmiany w schemacie czcionek systemu na pulpicie. Kiedy użytkownik zmienia między Normalne, Duże czcionki, a Bardzo duże czcionki, 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
, które jest definiowane podczas tworzenia nowego projektu Windows Forms w programie Visual Studio. Usuń ten wiersz kodu, jeśli tworzysz aplikację w wierszu polecenia.
Zobacz także
.NET Desktop feedback