Nasıl yapılır: Bir Windows Forms Uygulamasında Yazı Tipi Şeması Değişikliklerine Yanıt Verme

Windows işletim sistemlerinde, bir kullanıcı, varsayılan yazı tipinin daha büyük veya küçük görünmesini sağlamak için sistem genelindeki yazı tipi ayarlarını değiştirebilir. Bu yazı tipi ayarlarının değiştirilmesi, görme engelli kullanıcılar için kritiktir ve ekranlarındaki metni okumak için daha büyük bir tür gerektirir. Windows Forms uygulamanızı, form boyutunu artırarak veya azaltarak ve yazı tipi şeması her değiştiğinde içerilen tüm metinler için bu değişikliklere tepki verecek şekilde ayarlayabilirsiniz. Formunuzun yazı tipi boyutlarında değişiklikleri dinamik olarak sığbilmesini istiyorsanız formunuza kod ekleyebilirsiniz.

genellikle, Windows Forms tarafından kullanılan varsayılan yazı tipi, Microsoft.Win32 için ad alanı çağrısının döndürdüğü yazı tipidir GetStockObject(DEFAULT_GUI_FONT) . Bu çağrının döndürdüğü yazı tipi yalnızca ekran çözünürlüğü değiştiğinde değişir. Aşağıdaki yordamda gösterildiği gibi, kodunuzun IconTitleFont yazı tipi boyutundaki değişikliklere yanıt vermek için varsayılan yazı tipini olarak değiştirmesi gerekir.

Masaüstü yazı tipini kullanmak ve yazı tipi şeması değişikliklerine yanıt vermek için

  1. Formunuzu oluşturun ve istediğiniz denetimleri ekleyin. daha fazla bilgi için, bkz. nasıl yapılır: komut satırından Windows Forms uygulama oluşturma ve Windows Forms kullanılacak denetimler.

  2. Microsoft.Win32Kodunuza ad alanına bir başvuru ekleyin.

    using Microsoft.Win32;
    
    Imports Microsoft.Win32
    
  3. Aşağıdaki kodu, gerekli olay işleyicilerini bağlamak ve form için kullanılan varsayılan yazı tipini değiştirmek için formunuzun oluşturucusuna ekleyin.

    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. UserPreferenceChangedKategori değiştiğinde formun otomatik olarak ölçeklendirilmesine neden olan olay için bir işleyici uygulayın Window .

    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. Son olarak, FormClosing olay işleyicisini ayırır olayı için bir işleyici uygulayın UserPreferenceChanged .

    Önemli

    Bu kodun dahil edilmemesi, uygulamanızın belleği sızdırmasına neden olur.

    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. Kodu derleyin ve çalıştırın.

Windows XP 'de yazı tipi düzenini el ile değiştirmek için

  1. Windows Forms uygulamanız çalışırken, Windows masaüstüne sağ tıklayıp kısayol menüsünden özellikler ' i seçin.

  2. Görüntü özellikleri Iletişim kutusunda Görünüm sekmesine tıklayın.

  3. Yazı tipi boyutu aşağı açılan liste kutusundan yeni bir yazı tipi boyutu seçin.

    Formun artık Masaüstü yazı tipi düzeninde çalışma zamanı değişikliklerine tepki verdiğini fark edeceksiniz. Kullanıcı normal, büyük yazı tiplerive çok büyük yazı tipleriarasında değişiklik yaparken, form yazı tipini değiştirir ve doğru şekilde ölçeklendirir.

Örnek

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

bu kod örnekteki oluşturucu InitializeComponent , Visual Studio yeni bir Windows Forms projesi oluşturduğunuzda tanımlanan öğesine yönelik bir çağrı içerir. Uygulamanızı komut satırında oluşturuyorsanız bu kod satırını kaldırın.

Ayrıca bkz.