Procedure: Reageren op wijzigingen in lettertypeschema's in een Windows Forms-toepassing
In de Windows-besturingssystemen kan een gebruiker de instellingen voor lettertype voor het hele systeem wijzigen zodat het standaardlettertype groter of kleiner wordt weergegeven. Het wijzigen van deze lettertype-instellingen is essentieel voor gebruikers die slechtziend zijn en een groter type nodig hebben om de tekst op hun schermen te lezen. U kunt uw Windows Forms-toepassing aanpassen om op deze wijzigingen te reageren door de grootte van het formulier en alle opgenomen tekst te vergroten of verkleinen wanneer het lettertypeschema wordt gewijzigd. Als u wilt dat uw formulier dynamisch wijzigingen in tekengrootten aankan, kunt u code toevoegen aan uw formulier.
Normaal gesproken is het standaardlettertype dat wordt gebruikt door Windows Forms het lettertype dat wordt geretourneerd door de aanroep van de Microsoft.Win32 naamruimte naar GetStockObject(DEFAULT_GUI_FONT)
. Het lettertype dat door deze aanroep wordt geretourneerd, wordt alleen gewijzigd wanneer de schermresolutie verandert. Zoals wordt weergegeven in de volgende procedure, moet uw code het standaardlettertype wijzigen in IconTitleFont om te reageren op wijzigingen in de tekengrootte.
Het bureaubladlettertype gebruiken en reageren op wijzigingen in lettertypeschema's
Maak uw formulier en voeg de gewenste besturingselementen toe. Zie voor meer informatie Hoe: Een Windows Forms-toepassing maken vanaf de opdrachtregel en Besturingselementen voor gebruik op Windows Forms.
Voeg een verwijzing naar de Microsoft.Win32 naamruimte toe aan uw code.
using Microsoft.Win32;
Imports Microsoft.Win32
Voeg de volgende code toe aan de constructor van uw formulier om vereiste gebeurtenis-handlers te koppelen en om het standaardlettertype voor het formulier te wijzigen.
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
Implementeer een handler voor de UserPreferenceChanged gebeurtenis die ervoor zorgt dat het formulier automatisch wordt geschaald wanneer de Window categorie wordt gewijzigd.
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
Implementeer ten slotte een handler voor de FormClosing gebeurtenis die de UserPreferenceChanged gebeurtenis-handler loskoppelt.
Belangrijk
Als u deze code niet opneemt, lekt uw toepassing geheugen uit.
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
Compileer en voer de code uit.
Het lettertypeschema handmatig wijzigen in Windows XP
Terwijl uw Windows Forms-toepassing wordt uitgevoerd, klikt u met de rechtermuisknop op het Windows-bureaublad en kiest u Eigenschappen in het snelmenu.
Klik in het dialoogvenster Weergave-eigenschappen op het tabblad Weergave.
Selecteer in de vervolgkeuzelijst Tekengrootte een nieuwe tekengrootte.
U ziet dat het formulier nu reageert op wijzigingen tijdens runtime in het bureaubladlettertypeschema. Wanneer de gebruiker verandert tussen normaal, grote lettertypenen extra grote lettertypen, wordt het lettertype en de schaal correct aangepast.
Voorbeeld
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
De constructor in dit codevoorbeeld bevat een aanroep naar InitializeComponent
, die wordt gedefinieerd wanneer u een nieuw Windows Forms-project maakt in Visual Studio. Verwijder deze coderegel als u uw toepassing bouwt op de opdrachtregel.
Zie ook
.NET Desktop feedback