Procedura: rispondere a modifiche delle combinazioni dei tipi di carattere in un'applicazione Windows Form
Nei sistemi operativi Windows l'utente può modificare le impostazioni dei tipi di caratteri a livello di sistema, per variare le dimensioni di visualizzazione del tipo di carattere predefinito. La modifica di tali impostazioni è fondamentale per gli utenti con problemi di vista e che richiedono tipi di caratteri più grandi per la lettura dei testi sullo schermo. È possibile impostare l'applicazione Windows Form per rispondere a queste modifiche aumentando o riducendo le dimensioni dei tipi di caratteri e di tutto il testo relativo ogni volta che viene modificata la combinazione dei tipi di caratteri. Per fare in modo che il form gestisca le modifiche delle dimensioni dei tipi di caratteri in modo dinamico, è possibile aggiungere codice al form.
Generalmente, il tipo di carattere predefinito utilizzato da Windows Form è quello restituito dalla chiamata dello spazio dei nomi Microsoft.Win32 a GetStockObject(DEFAULT_GUI_FONT). Il tipo di carattere restituito dalla chiamata si modifica solo quando viene modificata la risoluzione dello schermo. Come illustrato nella procedura seguente, è necessario che il codice modifichi il tipo di carattere predefinito in IconTitleFont per rispondere alle modifiche delle dimensioni del tipo di carattere.
Per utilizzare il tipo di carattere del desktop e rispondere alle modifiche della combinazioni dei tipi di caratteri
Creare il form e aggiungere i controlli desiderati. Per ulteriori informazioni, vedere Procedura: creare un'applicazione Windows Form dalla riga di comando e Controlli da utilizzare in Windows Form.
Aggiungere un riferimento allo spazio dei nomi Microsoft.Win32 al codice.
Imports Microsoft.Win32
using Microsoft.Win32;
Aggiungere il codice riportato di seguito al costruttore del form per associare i gestori eventi necessari e per modificare il tipo di carattere predefinito da utilizzare nel form.
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);
Implementare un gestore per l'evento UserPreferenceChanged che determini il ridimensionamento automatico nel form quando la categoria Window si modifica.
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; } }
Infine implementare un gestore per l'evento FormClosing che disconnetta il gestore eventi UserPreferenceChanged.
Importante |
---|
La mancata inclusione del codice determinerà un problema di memoria nell'applicazione. |
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);
}
- Compilare il codice ed eseguirlo.
Per modificare manualmente la combinazione dei tipi di caratteri in Windows XP
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.
Nella finestra di dialogo Proprietà schermo fare clic sulla scheda Aspetto.
Dalla casella di riepilogo a discesa Dimensione carattere selezione una nuova dimensione per il carattere.
Il form risponderà alle modifiche in fase di esecuzione apportate alla combinazione dei tipi di caratteri del desktop. Quando l'utente passa da Normale a Caratteri grandi o a Caratteri molto grandi, nel form il tipo di carattere viene modificato e ridimensionato di conseguenza.
Esempio
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);
}
}
}
Il costruttore nell'esempio di codice include una chiamata a InitializeComponent, definito al momento della creazione di un nuovo progetto Windows Form in Visual Studio. Rimuovere questa riga di codice se si sta compilando l'applicazione dalla riga di comando.