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
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.
Microsoft.Win32Kodunuza ad alanına bir başvuru ekleyin.
using Microsoft.Win32;Imports Microsoft.Win32Aş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 SubUserPreferenceChangedKategori 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 SubSon 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 SubKodu 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ıp 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ş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.