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
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.
Kodunuza ad alanına Microsoft.Win32 bir başvuru ekleyin.
using Microsoft.Win32;
Imports Microsoft.Win32
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
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
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
Kodu derleyin ve çalıştırın.
Windows XP'de yazı tipi düzenini el ile değiştirmek için
Windows Forms uygulamanız çalışırken Windows masaüstüne sağ tıklayın ve kısayol menüsünden Özellikler'i seçin.
Görüntü Özellikleri iletişim kutusunda Görünüm sekmesine tıklayın.
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ı InitializeComponent
içerir. Uygulamanızı komut satırında oluşturuyorsanız bu kod satırını kaldırın.
Ayrıca bkz.
.NET Desktop feedback
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin