Freigeben über


Vorgehensweise: Reagieren auf Schriftartenschemaänderungen in einer Windows Forms-Anwendung

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 für Benutzer wichtig, die sehbehindert sind und einen größeren Typ benötigen, um den Text auf ihren Bildschirmen zu lesen. Sie können Ihre Windows Forms-Anwendung so anpassen, dass sie auf diese Änderungen reagiert, indem Sie die Größe des Formulars und den gesamten enthaltenen Text erhöhen oder verringern, wenn sich das Schriftartenschema ändert. Wenn Ihr Formular Änderungen an Schriftgraden dynamisch übernehmen soll, können Sie Ihrem Formular Code hinzufügen.

In der Regel ist die von Windows Forms verwendete Standardschriftart die Schriftart, die Microsoft.Win32 vom Namespaceaufruf GetStockObject(DEFAULT_GUI_FONT)zurückgegeben wird. Die von diesem Aufruf zurückgegebene Schriftart ändert sich nur, wenn sich die Bildschirmauflösung ändert. Wie im folgenden Verfahren gezeigt, muss Ihr Code die Standardschriftart so ändern, dass auf Änderungen des Schriftgrads reagiert wird, indem IconTitleFont verwendet wird.

So verwenden Sie die Desktopschriftart und reagieren auf Schriftartenschemaänderungen

  1. Erstellen Sie Ihr Formular, und fügen Sie die gewünschten Steuerelemente hinzu. Weitere Informationen finden Sie unter So erstellen Sie eine Windows Forms-Anwendung über die Befehlszeile und Steuerelemente für Windows Forms.

  2. Fügen Sie Ihrem Code einen Verweis auf den Microsoft.Win32 namespace hinzu.

    using Microsoft.Win32;
    
    Imports Microsoft.Win32
    
  3. Fügen Sie dem Konstruktor Ihres Formulars den folgenden Code hinzu, um erforderliche Ereignishandler zu verbinden und die standardschriftart zu ändern, die für das Formular verwendet wird.

    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
    
  4. Implementieren Sie einen Handler für das UserPreferenceChanged Ereignis, der bewirkt, dass das Formular automatisch skaliert wird, wenn sich die Window Kategorie ä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
    
  5. Implementieren Sie schließlich einen Handler für das FormClosing Ereignis, der den UserPreferenceChanged Handler entkoppelt.

    Von Bedeutung

    Wenn Sie diesen Code nicht einschließen, wird die Anwendung nicht in den Arbeitsspeicher fallen.

    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
    
  6. Kompilieren sie den Code, und führen Sie den Code aus.

So ändern Sie das Schriftartenschema in Windows XP manuell

  1. Während Die Windows Forms-Anwendung ausgeführt wird, klicken Sie mit der rechten Maustaste auf den Windows-Desktop, und wählen Sie im Kontextmenü "Eigenschaften " aus.

  2. Klicken Sie im Dialogfeld "Eigenschaften anzeigen " auf die Registerkarte " Darstellung ".

  3. Wählen Sie im Dropdown-Listenfeld "Schriftgrad " einen neuen Schriftgrad aus.

    Sie werden feststellen, dass das Formular jetzt auf Laufzeitänderungen im Desktopschriftartschema reagiert. Wenn der Benutzer zwischen "Normal", " Große Schriftarten" und " Extra Large Fonts" wechselt, ändert das Formular die Schriftart und skaliert ordnungsgemäß.

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 in der Befehlszeile erstellen.

Siehe auch