WPF Uygulamalarında Sayısal Veri Girişi için Şık Bir Yönetim
Windows Presentation Foundation (WPF) ile uygulama geliştirirken, geliştiricilerin karşılaştığı yaygın bir zorluk, sayısal değerlerin girişini yönetmektir. Bu sorun, NumericUpDown
özelliği için harici veya üçüncü taraf kontrollerine güvenmek istemediğinizde özellikle belirgindir.
Bu yazıda, standart TextBox
kontrolünü kullanarak sayısal girişi yönetmek için basit bir çözümü keşfedeceğiz ve temiz ve kullanıcı dostu bir arayüz sağlamak için bunları yapacağız.
Sorun: WPF’de Sayısal Girişi Yönetme
Bir NumericUpDown
kontrolünün kolaylığı olmadan, kullanıcıların bir TextBox
‘a yalnızca sayısal değerler girmesini nasıl garanti edebiliriz? Geliştiriciler genellikle anahtar olaylarını manuel olarak yönetmeye başvurur ve bu genellikle karmaşık ve daha az okunabilir koda yol açar. Birçok geliştirici, yalnızca rakamların işlenmesini sağlamak için klavye girdilerini kesmek üzere olay işleyicileri uygulama yoluna girmiştir.
İşte sayısal girişi doğrulamak için geliştiricilerin sıklıkla kullandığı bir kod örneği:
private void NumericEditPreviewKeyDown(object sender, KeyEventArgs e)
{
bool isNumPadNumeric = (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) || e.Key == Key.Decimal;
bool isNumeric = (e.Key >= Key.D0 && e.Key <= Key.D9) || e.Key == Key.OemPeriod;
if ((isNumeric || isNumPadNumeric) && Keyboard.Modifiers != ModifierKeys.None)
{
e.Handled = true;
return;
}
bool isControl = ((Keyboard.Modifiers != ModifierKeys.None && Keyboard.Modifiers != ModifierKeys.Shift)
|| e.Key == Key.Back || e.Key == Key.Delete || e.Key == Key.Insert
|| e.Key == Key.Down || e.Key == Key.Left || e.Key == Key.Right || e.Key == Key.Up
|| e.Key == Key.Tab
|| e.Key == Key.PageDown || e.Key == Key.PageUp
|| e.Key == Key.Enter || e.Key == Key.Return || e.Key == Key.Escape
|| e.Key == Key.Home || e.Key == Key.End);
e.Handled = !isControl && !isNumeric && !isNumPadNumeric;
}
Bu çözüm başlangıçta tatmin edici görünebilir, ancak şık değil. Kod hızla okunması zor ve bakımı zor hale gelebilir. Neyse ki, daha zarif bir alternatif vardır.
Çözüm: Basit Sayısal Doğrulama
Her olası tuş vuruşunu yönetmenin karmaşıklıklarına dalmak yerine, OnPreviewTextInput
olayını kullanarak doğrulama sürecini basitleştirebiliriz. Bu yaklaşım, çok daha temiz bir uygulama sağlar. Bunu nasıl başarabileceğinize bakalım:
Adım 1: OnPreviewTextInput Yöntemini Geçersiz Kılın
Girdiğin geçerli sayısal karakterlerden oluşup oluşmadığını kolayca doğrulamak için TextBox
‘ınızın OnPreviewTextInput
yöntemini geçersiz kılabilirsiniz.
protected override void OnPreviewTextInput(System.Windows.Input.TextCompositionEventArgs e)
{
e.Handled = !AreAllValidNumericChars(e.Text);
base.OnPreviewTextInput(e);
}
Adım 2: Karakter Doğrulama için Yardımcı Bir Yöntem Oluşturun
Girdi dizesindeki tüm karakterlerin sayısal olup olmadığını kontrol eden basit bir yardımcı yöntem aşağıda verilmiştir:
private bool AreAllValidNumericChars(string str)
{
foreach(char c in str)
{
if(!Char.IsNumber(c)) return false; // Sayısal olmayan bir karakter bulunursa false döndür
}
return true; // Tüm karakterler sayısalsa true döndür
}
Sonuç
OnPreviewTextInput
yöntemini ve özel bir doğrulama yöntemini kullanarak, WPF uygulamalarında sayısal girişi etkili bir şekilde yönetebiliriz; böylece kodumuzu kapsamlı anahtar olayı işleme ile karıştırmamış oluruz. Bu yaklaşım yalnızca kodun okunabilirliğini artırmakla kalmaz, aynı zamanda yalnızca geçerli sayısal girişlerin kabul edilmesini sağlayarak kullanıcı deneyimini de geliştirir.
Temiz ve verimli bir çözüm uygulamak, geliştiricilerin uygulamalarının temel işlevine daha fazla odaklanmasına izin verir, böylece karmaşık girdi doğrulama mekanizmalarına takılmadan ilerleyebilirler.
WPF’de sayısal veri girişi mantığınızı basit hale getirmenin vakti gelmedi mi? Bu yaklaşımı deneyin ve daha temiz bir kod tabanı ve daha iyi bir kullanıcı deneyiminin tadını çıkarın!