Gewusst wie: Reagieren auf Änderungen des Schriftartenschemas in einer Windows Forms-Anwendung

Aktualisiert: November 2007

In den Windows-Betriebssystemen kann ein Benutzer die systemweiten Schriftarteinstellungen ändern, damit die Standardschriftart größer oder kleiner angezeigt wird. Das Ändern dieser Schriftarteinstellungen ist besonders für sehbehinderte Benutzer von Bedeutung, die auf größere Schriftarten angewiesen sind, um den Text auf dem Bildschirm lesen zu können. Sie können die Windows Forms-Anwendung anpassen, sodass die Größe des Formulars und des darin enthaltenen Textes zu- oder abnimmt, wenn sich das Schriftartschema ändert. Wenn sich das Formular bei Änderungen der Schriftartgröße dynamisch anpassen soll, können Sie dem Formular Code hinzufügen.

Die Standardschriftart von Windows Forms ist in der Regel die Schriftart, die vom Microsoft.Win32-Namespace beim Aufrufen von GetStockObject(DEFAULT_GUI_FONT) zurückgegeben wird. Die von diesem Aufruf zurückgegebene Schriftart ändert sich nur, wenn sich die Bildschirmauflösung ändert. Wie in der folgenden Prozedur gezeigt, muss der Code die Standardschriftart in IconTitleFont ändern, damit bei Änderungen der Schriftartgröße entsprechend reagiert wird.

So verwenden Sie die Desktopschriftart und reagieren auf Änderungen des Schriftartschemas

  1. Erstellen Sie das Formular, und fügen Sie die gewünschten Steuerelemente hinzu. Weitere Informationen finden Sie unter Gewusst wie: Erstellen von Windows Forms-Anwendungen über die Befehlszeile und Steuerelemente für Windows Forms.

  2. Fügen Sie im Code einen Verweis auf den Microsoft.Win32-Namespace hinzu.

    Imports Microsoft.Win32
    
    using Microsoft.Win32;
    
  3. Fügen Sie dem Konstruktor folgenden Code des Formulars hinzu, um die erforderlichen Ereignishandler zu verknüpfen und die für das Formular verwendete Standardschriftart zu ändern.

    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
    
    this.Font = SystemFonts.IconTitleFont;
    SystemEvents.UserPreferenceChanged += new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged);
    this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
    
  4. Implementieren Sie einen Handler für das UserPreferenceChanged-Ereignis, durch den das Formular automatisch skaliert wird, wenn sich die Window-Kategorie ändert.

    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
    
    void SystemEvents_UserPreferenceChanged(object sender, UserPreferenceChangedEventArgs e)
    {
        if (e.Category == UserPreferenceCategory.Window)
        {
            this.Font = SystemFonts.IconTitleFont;
        }
    }
    
  5. Implementieren Sie zuletzt einen Handler für das FormClosing-Ereignis, durch den der UserPreferenceChanged-Ereignishandler getrennt wird.

Wichtiger Hinweis:

Wenn Sie diesen Code nicht verwenden, führt dies zu Speicherverlust in der Anwendung.

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
void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    SystemEvents.UserPreferenceChanged -= new UserPreferenceChangedEventHandler(SystemEvents_UserPreferenceChanged);
}

So ändern Sie das Schriftartschema in Windows XP manuell

  1. Starten Sie die Windows Forms-Anwendung, klicken Sie mit der rechten Maustaste auf den Windows-Desktop, und wählen Sie im Kontextmenü Eigenschaften aus.

  2. Klicken Sie im Dialogfeld Eigenschaften von Anzeige auf die Registerkarte Darstellung.

  3. Wählen Sie in der Dropdownliste Grad einen neuen Schriftgrad aus.

    Beachten Sie, dass das Formular nun auf Laufzeitänderungen im Desktopschriftartschema reagiert. Wenn der Benutzer zwischen Standard, Groß und Extragroß wechselt, ändern sich die Schriftart und die Skalierung des Formulars entsprechend.

Beispiel

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
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);
        }
    }
}

Der Konstruktor in diesem Codebeispiel enthält einen Aufruf an InitializeComponent, der definiert wird, wenn Sie ein neues Windows Forms-Projekt in Visual Studio erstellen. Entfernen Sie diese Codezeile, wenn Sie die Anwendung in der Befehlszeile erstellen.

Siehe auch

Konzepte

Automatische Skalierung in Windows Forms

Referenz

PerformAutoScale