Share via


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

Windows işletim sistemlerinde, kullanıcı varsayılan yazı tipinin daha büyük veya daha küçük görünmesini sağlamak için sistem genelinde yazı tipi ayarlarını değiştirebilir. Bu yazı tipi ayarlarının değiştirilmesi, görme engelli olan ve ekranlarındaki metni okumak için daha büyük bir tür gerektiren kullanıcılar için kritik öneme sahiptir. Yazı tipi düzeni her değiştiğinde formun ve tüm kapsanan metnin boyutunu artırarak veya azaltarak Windows Forms uygulamanızı bu değişikliklere tepki vermek üzere ayarlayabilirsiniz. Formunuzun yazı tipi boyutlarındaki değişiklikleri dinamik olarak barındırmasını istiyorsanız, formunuza kod ekleyebilirsiniz.

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

Masaüstü yazı tipini kullanmak ve yazı tipi düzeni 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: Windows Forms'da Kullanılacak Komut Satırı ve Denetimler'den Windows Forms Uygulaması Oluşturma.

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

    using Microsoft.Win32;
    
    Imports Microsoft.Win32
    
  3. Gerekli olay işleyicilerini bağlamak ve formda kullanılan varsayılan yazı tipini değiştirmek için formunuzun oluşturucusunun içine aşağıdaki kodu 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. Kategori değiştiğinde formun UserPreferenceChanged otomatik Window olarak ölçeklendirilmesine neden olan olay için bir işleyici uygulayın.

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

    Önemli

    Bu kodun dahil edilmemesi uygulamanızın bellek sızıntısı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ın ve 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çılan liste kutusundan yeni bir yazı tipi boyutu seçin.

    Formun artık masaüstü yazı tipi düzenindeki çalışma zamanı değişikliklerine tepki olduğunu fark edeceksiniz. Kullanıcı Normal, Büyük Yazı Tipleri ve Fazladan Büyük Yazı Tipleri arasında değiştiğinde, form yazı tipini değiştirir ve doğru ölçeklendirilir.

Ö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 örneğindeki oluşturucu, Visual Studio'da yeni bir Windows Forms projesi oluşturduğunuzda tanımlanan öğesine bir çağrı InitializeComponentiçerir. Uygulamanızı komut satırında oluşturuyorsanız bu kod satırını kaldırın.

Ayrıca bkz.