Compartir a través de


Cómo: Responder a los cambios de las combinaciones de fuentes en una aplicación de Windows Forms

Actualización: noviembre 2007

En los sistemas operativos Windows, el usuario puede cambiar la configuración de fuente de todo el sistema para que la fuente predeterminada aparezca más grande o más pequeña. Cambiar esta configuración de fuente es imprescindible para aquellos usuarios visualmente discapacitados y que requieren un tipo mayor para leer los textos en la pantalla. Se puede ajustar la aplicación de Windows Forms para que responda a estos cambios aumentando o disminuyendo el tamaño del formulario y de todo el texto cuando cambie las combinaciones de fuentes. Si desea que el formulario se adapte dinámicamente a los cambios de fuentes, agregue código al formulario.

Normalmente, la fuente predeterminada utilizada por los formularios Windows Forms es la fuente devuelta por la llamada del espacio de nombres Microsoft.Win32 a GetStockObject(DEFAULT_GUI_FONT). La fuente que devuelve esta llamada sólo cambia cuando cambia la resolución de la pantalla. Como se muestra en el procedimiento siguiente, el código debe cambiar la fuente predeterminada a IconTitleFont para responder a los cambios del tamaño de la fuente.

Para utilizar la fuente del escritorio y responder a los cambios de la combinación de fuentes

  1. Cree el formulario y agregue los controles que desea. Para obtener más información, vea Cómo: Crear una aplicación de Windows Forms desde la línea de comandos y Controles que se utilizan en formularios Windows Forms.

  2. Agregue al código una referencia al espacio de nombres Microsoft.Win32.

    Imports Microsoft.Win32
    
    using Microsoft.Win32;
    
  3. Agregue el código siguiente al constructor del formulario para enlazar los controladores de eventos necesarios, y cambiar la fuente predeterminada utilizada en el formulario.

    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. Implemente un controlador para el evento UserPreferenceChanged que hace que el formulario se ajuste automáticamente cuando cambia la categoría Window.

    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. Por último, implemente un controlador para el evento FormClosing que desasocia el controlador de eventos UserPreferenceChanged.

Nota importante:

Si no se incluye ese código, la aplicación perderá memoria.

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

Para cambiar manualmente la combinación de fuentes en Windows XP

  1. Mientras está ejecutándose la aplicación de Windows Forms, haga clic con el botón secundario del mouse en el escritorio Windows y elija Propiedades en el menú de acceso directo.

  2. En el cuadro de diálogo Mostrar propiedades, haga clic en la ficha Apariencia.

  3. En el cuadro de lista desplegable Tamaño de fuente, seleccione un nuevo tamaño de la fuente.

    Observará que ahora el formulario responde a los cambios en tiempo de ejecución en la combinación de fuentes de escritorio. Cuando el usuario cambia entre Normal, Fuentes grandes y Fuentes extragrandes, el formulario cambia la fuente y las escalas correctamente.

Ejemplo

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

El constructor de este ejemplo de código contiene una llamada a InitializeComponent, que se define cuando se crea un nuevo proyecto de formularios Windows Forms en Visual Studio. Quite esta línea de código si está generando la aplicación en la línea de comandos.

Vea también

Conceptos

Ajuste automático de escala en formularios Windows Forms

Referencia

PerformAutoScale