Vorgehensweise: Reagieren auf Änderungen des Schriftartenschemas in einer Windows Forms-Anwendung
In einem Windows-Betriebssystem können Benutzer die systemweiten Schriftarteneinstellungen ändern, um die Standardschrift größer oder kleiner erscheinen zu lassen. Das Ändern dieser Schriftarteneinstellungen ist wichtig für Benutzer mit Sehbehinderungen, die eine größere Schrift benötigen, um den Text auf ihrem Bildschirm lesen zu können. Sie können Ihre Windows Forms-Anwendung so einstellen, dass sie auf diese Änderungen reagiert, indem das Formular und der gesamte enthaltene Text vergrößert oder verkleinert wird, sobald sich das Schriftartenschema ändert. Wenn Sie möchten, dass Ihr Formular die Schriftgrößen dynamisch anpasst, können Sie Ihrem Formular Code hinzufügen.
Typischerweise verwendet Windows Forms als Standardschriftart die Schriftart, die beim Aufruf von GetStockObject(DEFAULT_GUI_FONT)
durch den Namespace Microsoft.Win32 zurückgegeben wird. Die durch diesen Aufruf zurückgegebene Schriftart wird nur bei einer Änderung der Bildschirmauflösung geändert. Wie im folgenden Verfahren gezeigt, muss Ihr Code die Standardschriftart in IconTitleFont ändern, um auf Änderungen der Schriftgröße zu reagieren.
So verwenden Sie die Desktopschriftart und reagieren auf Änderungen des Schriftartenschemas
Erstellen Sie Ihr Formular, und fügen Sie ihm die gewünschten Steuerelemente hinzu. Weitere Informationen finden Sie unter Erstellen von Windows Forms-Anwendungen über die Befehlszeile und Steuerelemente für Windows Forms.
Fügen Sie Ihrem Code einen Verweis auf den Microsoft.Win32-Namespace hinzu.
using Microsoft.Win32;
Imports Microsoft.Win32
Fügen Sie den folgenden Code in den Konstruktor Ihres Formulars ein, um die erforderlichen Ereignishandler einzubinden und die Standardschriftart des Formulars zu ändern.
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
Implementieren Sie einen Handler für das Ereignis UserPreferenceChanged, der bewirkt, dass das Formular automatisch skaliert wird, wenn sich die Kategorie Window ändert.
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
Implementieren Sie schließlich einen Handler für das Ereignis FormClosing, der den Ereignishandler UserPreferenceChanged trennt.
Wichtig
Wenn Sie diesen Code nicht einbinden, führt dies zu einem Speicherleck in Ihrer Anwendung.
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
Kompilieren Sie den Code, und führen Sie diesen aus.
So ändern Sie das Schriftartenschema in Windows XP manuell
Klicken Sie in Ihrer ausgeführten Windows Forms-Anwendung mit der rechten Maustaste auf den Windows-Desktop, und wählen Sie im Kontextmenü die Option Eigenschaften aus.
Klicken Sie im Dialogfeld Anzeigeeigenschaften auf die Registerkarte Darstellung.
Wählen Sie im Dropdownlistenfeld Schriftgrad eine neue Schriftgröße aus.
Sie werden feststellen, dass das Formular jetzt zur Laufzeit auf Änderungen am Schriftartenschema des Desktops reagiert. Wenn der Benutzer zwischen Normal, Große Schriftarten und Sehr große Schriftarten wechselt, ändert das Formular die Schriftart und führt eine ordnungsgemäße Skalierung durch.
Beispiel
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
Der Konstruktor in diesem Codebeispiel enthält einen Aufruf von InitializeComponent
, der definiert wird, wenn Sie ein neues Windows Forms-Projekt in Visual Studio erstellen. Entfernen Sie diese Codezeile, wenn Sie Ihre Anwendung über die Befehlszeile erstellen.
Weitere Informationen
.NET Desktop feedback