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 vom Microsoft.Win32 Namespaceaufruf an 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 in IconTitleFont ändern, um auf Änderungen des Schriftgrads zu reagieren.

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 von der Befehlszeile und Steuerungen 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 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
    
  5. Implementieren Sie schließlich einen Handler für das FormClosing-Ereignis, der den UserPreferenceChanged-Ereignishandler trennt.

    Wichtig

    Wenn Sie diesen Code nicht einfügen, führt dies dazu, dass Ihre Anwendung Speicher verliert.

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

So ändern Sie das Schriftartenschema in Windows XP manuell

  1. Klicken Sie während Ihre Windows Forms-Anwendung läuft, mit der rechten Maustaste auf den Windows-Desktop, und wählen Sie im Kontextmenü Eigenschaft aus.

  2. Klicken Sie im Dialogfeld Anzeigeneigenschaften auf die Registerkarte Darstellung.

  3. \nWählen Sie im Dropdown-Menü Schriftgröße eine neue Schriftgröße aus.

    Sie werden feststellen, dass das Formular jetzt auf Laufzeitänderungen im Desktopschriftartschema reagiert. Wenn der Benutzer zwischen Normal-, Große Schriftartenund Extra große Schriftartenändert, ä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 in Visual Studio ein neues Windows Forms-Projekt erstellen. Entfernen Sie diese Codezeile, wenn Sie Ihre Anwendung in der Befehlszeile erstellen.

Siehe auch