Condividi tramite


Procedura: Rispondere a modifiche delle combinazioni dei tipi di carattere in un'applicazione Windows Form

Nei sistemi operativi Windows, un utente può modificare le impostazioni del tipo di carattere a livello di sistema per rendere il tipo di carattere predefinito più grande o più piccolo. La modifica di queste impostazioni del tipo di carattere è fondamentale per gli utenti con problemi di vista e richiedono un tipo più grande per leggere il testo sulle loro schermate. È possibile modificare l'applicazione Windows Form per reagire a queste modifiche aumentando o riducendo le dimensioni del modulo e tutto il testo contenuto ogni volta che cambia lo schema dei tipi di carattere. Se si desidera che il modulo soddisfi le modifiche delle dimensioni dei caratteri in modo dinamico, è possibile aggiungere codice al modulo.

In genere, il tipo di carattere predefinito usato da Windows Form è il tipo di carattere restituito dalla Microsoft.Win32 chiamata dello spazio dei nomi a GetStockObject(DEFAULT_GUI_FONT). Il tipo di carattere restituito da questa chiamata cambia solo quando cambia la risoluzione dello schermo. Come illustrato nella procedura seguente, il codice deve modificare il tipo di carattere predefinito in IconTitleFont per rispondere alle modifiche apportate alle dimensioni del carattere.

Per usare il tipo di carattere desktop e rispondere alle modifiche dello schema dei tipi di carattere

  1. Creare il modulo e aggiungere i controlli desiderati. Per altre informazioni, vedere Procedura: Creare un'applicazione Windows Form dalla riga di comando e dai controlli da usare in Windows Form.

  2. Aggiungere un riferimento allo spazio dei Microsoft.Win32 nomi al codice.

    using Microsoft.Win32;
    
    Imports Microsoft.Win32
    
  3. Aggiungere il codice seguente al costruttore del modulo per associare i gestori eventi necessari e modificare il tipo di carattere predefinito in uso per il modulo.

    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. Implementare un gestore per l'evento UserPreferenceChanged che fa sì che il modulo venga ridimensionato automaticamente quando cambia la Window categoria.

    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. Infine, implementare un gestore per l'evento FormClosing che scollega il UserPreferenceChanged gestore eventi.

    Importante

    Se non si include questo codice, l'applicazione perderà memoria.

    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. Compilare ed eseguire il codice.

Per modificare manualmente lo schema dei tipi di carattere in Windows XP

  1. Mentre l'applicazione Windows Form è in esecuzione, fare clic con il pulsante destro del mouse sul desktop di Windows e scegliere Proprietà dal menu di scelta rapida.

  2. Nella finestra di dialogo Proprietà visualizzazione fare clic sulla scheda Aspetto.

  3. Nella casella di riepilogo a discesa Dimensioni carattere selezionare una nuova dimensione del carattere.

    Si noterà che il modulo ora reagisce alle modifiche in fase di esecuzione nello schema dei tipi di carattere desktop. Quando l'utente cambia tra caratteri normali, grandi e caratteri di grandi dimensioni, il modulo modifica il tipo di carattere e viene ridimensionato correttamente.

Esempio

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

Il costruttore in questo esempio di codice contiene una chiamata a InitializeComponent, definita quando si crea un nuovo progetto Windows Form in Visual Studio. Rimuovere questa riga di codice se si compila l'applicazione nella riga di comando.

Vedi anche