C# uygulamanızdaki metin kutularının yalnızca sayısal girdi kabul etmesini sağlamak, veri bütünlüğü ve olumlu bir kullanıcı deneyimi için çok önemlidir. Bu, geçersiz girişleri önler ve veri işlemeyi basitleştirir. Bu makale, her biri farklı esneklik ve karmaşıklık seviyeleri sunan bu hedefe ulaşmak için üç etkili yöntemi ele almaktadır.
İçindekiler
- KeyPressEventArgs ile Girdi Doğrulama
- Esnek Doğrulama için Düzenli İfadelerin Kullanımı
- NumericUpDown Kontrolünden Faydalanma
KeyPressEventArgs
ile Girdi Doğrulama
Bu yaklaşım, metin kutusunda hangi tuşlara izin verileceği üzerinde doğrudan kontrol sağlar. Basılan tuşun bir rakam (0-9) veya bir geri alma tuşu olup olmadığını kontrol etmek için KeyPress
olayı işlenir.
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
// Yalnızca rakamlar (0-9) ve geri alma tuşuna izin ver
if (!char.IsDigit(e.KeyChar) && e.KeyChar != (char)8)
{
e.Handled = true; // Tuş basımını engelle
}
}
Bu yöntem, basit tamsayı girdisini doğrulamak için özlü ve verimlidir. char.IsDigit(e.KeyChar)
, tuşun bir rakam olup olmadığını doğrular; e.KeyChar != (char)8
ise silme işlemi için geri alma tuşuna izin verir. e.Handled = true
, rakam olmayan tuşların girilmesini engeller.
Esnek Doğrulama için Düzenli İfadelerin Kullanımı
Düzenli ifadeler, özellikle daha karmaşık sayısal formatları (örneğin, ondalık sayılar, bilimsel gösterim) işlerken güçlü ve uyarlanabilir bir çözüm sunar. Regex.IsMatch()
yöntemi, metin kutusunun metninin tanımlanmış bir sayısal kalıba uygun olup olmadığını kontrol eder.
private void textBox2_TextChanged(object sender, EventArgs e)
{
// Yalnızca rakamlar ve isteğe bağlı olarak bir ondalık nokta
string pattern = @"^[0-9]*(.[0-9]+)?$";
if (!Regex.IsMatch(textBox2.Text, pattern))
{
// Önceki geçerli değeri geri yükle veya metin kutusunu temizle. Burada hata işleme çok önemlidir.
// Daha sağlam bir çözüm için, son geçerli değeri izlemeyi düşünün.
textBox2.Text = textBox2.Text.Substring(0, textBox2.Text.Length - 1);
textBox2.SelectionStart = textBox2.Text.Length; // İmleç konumunu ayarla
}
}
@"^[0-9]*(.[0-9]+)?$"
kalıbı, sıfır veya daha fazla rakamı ([0-9]*
), isteğe bağlı olarak bir ondalık nokta ve bir veya daha fazla rakamı ((.[0-9]+)?
) kabul eder. ^
ve $
işaretleri, tüm dizenin kalıpla eşleştiğinden emin olur. Girdi eşleşmezse, son karakter silinir; üretim uygulamaları için daha gelişmiş hata işlemeyi göz önünde bulundurun.
NumericUpDown
Kontrolünden Faydalanma
Yerleşik NumericUpDown
kontrolü, sayısal girdi için kullanıcı dostu ve basit bir çözüm sunar. Girişi doğal olarak sayısal değerlerle sınırlar ve artırma/azaltma düğmeleri ve aralık doğrulama gibi özellikler sağlar.
// Formunuza bir NumericUpDown kontrolü ekleyin (örneğin, numericUpDown1)
// Gerektiği gibi özellikleri ayarlayın (Minimum, Maksimum, OndalıkBasamakSayısı vb.)
// numericUpDown1.Value kullanarak değere erişin
int numericValue = (int)numericUpDown1.Value;
İhtiyaçlarınız onun yetenekleriyle uyumluysa bu en basit seçenektir. Doğrulamayı otomatik olarak işler ve net bir kullanıcı arayüzü sağlar. Bununla birlikte, son derece özelleştirilmiş doğrulama veya biçimlendirme gerektiren senaryolar için uygun olmayabilir.
En iyi yöntem, belirli gereksinimlerinize bağlıdır. Basit tamsayı girdisi için KeyPressEventArgs
verimlidir. Karmaşık formatlar veya gelişmiş kullanıcı deneyimi için düzenli ifadeler veya NumericUpDown
tercih edilir. Her zaman hata işlemeyi ve kullanıcı deneyimini göz önünde bulundurun.