Procedimiento para responder a los cambios de las combinaciones de fuentes en una aplicación de formularios Windows Forms
En los sistemas operativos Windows, un usuario puede cambiar la configuración de la fuente en todo el sistema para hacer que la fuente predeterminada aparezca más grande o más pequeña. Cambiar la configuración de estas fuentes es fundamental para los usuarios con problemas de visión que necesitan un tipo de letra más grande para leer el texto en sus pantallas. Puede ajustar su aplicación Windows Forms para que reaccione a estos cambios aumentando o disminuyendo el tamaño del formulario y de todo el texto contenido siempre que cambie la combinación de fuentes. Si desea que el formulario se adapte dinámicamente a los cambios en los tamaños de fuente, puede agregar código al formulario.
Normalmente, la fuente predeterminada usada por Windows Forms es la fuente devuelta por la llamada del espacio de nombres Microsoft.Win32 a GetStockObject(DEFAULT_GUI_FONT)
. La fuente devuelta por esta llamada solo cambia cuando cambia la resolución de pantalla. Como se muestra en el siguiente procedimiento, su código debe cambiar la fuente predeterminada a IconTitleFont para responder a los cambios en el tamaño de la fuente.
Para usar la fuente de escritorio y responder a los cambios de combinación de fuentes
Cree el formulario y agregue los controles que desee. Para obtener más información, vea Cómo: Crear una aplicación de Windows Forms desde la línea de comandos y Controles a utilizar en Windows Forms.
Agregue una referencia al espacio de nombres Microsoft.Win32 a su código.
using Microsoft.Win32;
Imports Microsoft.Win32
Agregue el código siguiente al constructor del formulario para enlazar controladores de eventos necesarios y cambiar la fuente predeterminada en uso para el formulario.
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
Implemente un controlador para el evento UserPreferenceChanged que hace que el formulario se escale automáticamente cuando la categoría Window cambia.
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
Por último, implemente un controlador para el evento FormClosing que separa el controlador del evento UserPreferenceChanged.
Importante
Si no se incluye este código, la aplicación 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
Compile y ejecute el código.
Para cambiar manualmente la combinación de fuentes en Windows XP
Mientras se ejecuta su aplicación Windows Forms, haga clic con el botón derecho en el escritorio de Windows y seleccione Propiedades en el menú contextual.
En el cuadro de diálogo Propiedades de pantalla, haga clic en la pestaña Apariencia.
En el cuadro de lista desplegable Tamaño de fuente, seleccione un nuevo tamaño de fuente.
Observará que el formulario ahora reacciona 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 extra grandes, el formulario cambia de fuente y se escala correctamente.
Ejemplo
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
El constructor de este ejemplo de código contiene una llamada a InitializeComponent
, que se define al crear un nuevo proyecto de Windows Forms en Visual Studio. Elimine esta línea de código si está construyendo su aplicación en la línea de comandos.
Vea también
.NET Desktop feedback