18 Eylül 2012 Salı

C# ile ErrorProvider

Merhaba değerli Webkolog.net takipçileri, bugünkü yazımızda C# .NET Framework 4 ile Windows Forms uygulamalarımızda kullanıcı girişlerini doğrulamak ve hatalı girişler hakkında görsel geri bildirim sağlamak için kullandığımız ErrorProvider kontrolünü yakından inceleyeceğiz. ErrorProvider, kullanıcıların formlardaki hataları kolayca fark etmesini ve düzeltmesini sağlayarak kullanıcı deneyimini önemli ölçüde iyileştirir. Gelin, ErrorProvider'ın temel özelliklerini, metotlarını ve kullanım senaryolarını birlikte keşfedelim.

ErrorProvider Kontrolü Nedir?

ErrorProvider kontrolü, bir form üzerindeki kontrollerle ilişkilendirilerek, kullanıcı girişi hatalarını görsel olarak belirtmek için kullanılır. Genellikle, hatalı giriş yapılan bir kontrolün yanında küçük bir hata ikonu (genellikle kırmızı bir ünlem işareti) görüntüler. Fare imleci bu ikonun üzerine getirildiğinde, hatanın açıklamasını içeren bir ipucu (tooltip) gösterir. ErrorProvider, görsel bir kontrol değildir; formun tasarımcı görünümüne eklenen bir bileşendir.

ErrorProvider Kontrolünün Temel Özellikleri ve Metotları

ErrorProvider bileşeni, hata gösteriminin davranışını ve görünümünü özelleştirmek için çeşitli özelliklere sahiptir:

  • SetError(Control control, string errorMessage): Belirli bir kontrole bir hata mesajı atar. Bu metot çağrıldığında, kontrolün yanında hata ikonu görünür ve fare üzerine gelindiğinde errorMessage gösterilir. Eğer errorMessage boş bir string ("") olarak ayarlanırsa, hata ikonu gizlenir.
  • GetError(Control control): Belirli bir kontrol için ayarlanmış hata mesajını döndürür.
  • BlinkRate: Hata ikonunun yanıp sönme hızını (milisaniye cinsinden) belirler. 0 olarak ayarlanırsa ikon yanıp sönmez.
  • BlinkStyle: Hata ikonunun yanıp sönme stilini belirler (AlwaysBlink, BlinkIfDifferentError, NeverBlink).
  • Icon: Hata olarak görüntülenecek ikonu alır veya ayarlar. Varsayılan olarak kırmızı bir ünlem işaretidir.
  • ContainerControl: ErrorProvider'ın hangi konteyner kontrolü (genellikle form) ile ilişkili olduğunu belirtir.

ErrorProvider Kullanım Senaryoları

1. Basit Bir Metin Kutusu Doğrulaması

Bu örnekte, bir metin kutusunun boş bırakılıp bırakılmadığını kontrol edeceğiz ve eğer boşsa bir hata mesajı göstereceğiz.

using System;
using System.Windows.Forms;

public partial class Form1 : Form
{
    private ErrorProvider errorProvider1; // Tasarımcıda eklenen ErrorProvider bileşeni
    private TextBox textBoxIsim;          // Tasarımcıda eklenen isim metin kutusu
    private Button buttonKaydet;         // Tasarımcıda eklenen Kaydet butonu

    public Form1()
    {
        InitializeComponent();

        // Tasarımcıda errorProvider1, textBoxIsim ve buttonKaydet'in eklenmiş olduğunu varsayalım.

        // ErrorProvider nesnesini oluştur (eğer tasarımcıda eklemediyseniz)
        errorProvider1 = new ErrorProvider();
        errorProvider1.BlinkStyle = ErrorBlinkStyle.NeverBlink; // İkonun yanıp sönmemesini sağla

        // TextBox'ın TextChanged olayına doğrulama metodunu bağla
        this.textBoxIsim.TextChanged += new EventHandler(textBoxIsim_TextChanged);
        // Butonun Click olayına kaydetme metodunu bağla
        this.buttonKaydet.Click += new EventHandler(buttonKaydet_Click);
    }

    private void textBoxIsim_TextChanged(object sender, EventArgs e)
    {
        // Metin kutusu boşsa hata göster, değilse hatayı temizle
        if (string.IsNullOrEmpty(this.textBoxIsim.Text))
        {
            errorProvider1.SetError(this.textBoxIsim, "İsim alanı boş bırakılamaz!");
        }
        else
        {
            errorProvider1.SetError(this.textBoxIsim, ""); // Hatayı temizle
        }
    }

    private void buttonKaydet_Click(object sender, EventArgs e)
    {
        // Butona tıklandığında son bir doğrulama yap
        if (string.IsNullOrEmpty(this.textBoxIsim.Text))
        {
            errorProvider1.SetError(this.textBoxIsim, "İsim alanı boş bırakılamaz!");
            MessageBox.Show("Lütfen gerekli alanları doldurun.", "Uyarı", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }
        else
        {
            errorProvider1.SetError(this.textBoxIsim, ""); // Hatayı temizle
            MessageBox.Show("Bilgiler başarıyla kaydedildi: " + this.textBoxIsim.Text, "Başarılı", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
}
2. Sayısal Giriş Doğrulaması

Bu örnekte, bir metin kutusuna sadece sayısal değer girilip girilmediğini kontrol edeceğiz.

using System;
using System.Windows.Forms;

public partial class Form1 : Form
{
    private ErrorProvider errorProvider1;
    private TextBox textBoxYas; // Yaş girişi için metin kutusu

    public Form1()
    {
        InitializeComponent();
        errorProvider1 = new ErrorProvider();
        errorProvider1.BlinkStyle = ErrorBlinkStyle.NeverBlink;

        this.textBoxYas.TextChanged += new EventHandler(textBoxYas_TextChanged);
    }

    private void textBoxYas_TextChanged(object sender, EventArgs e)
    {
        int yas;
        // Metin kutusundaki değerin sayısal olup olmadığını kontrol et
        if (!int.TryParse(this.textBoxYas.Text, out yas))
        {
            errorProvider1.SetError(this.textBoxYas, "Lütfen geçerli bir sayı girin!");
        }
        else if (yas < 0 || yas > 120) // Yaş aralığı kontrolü
        {
            errorProvider1.SetError(this.textBoxYas, "Yaş 0 ile 120 arasında olmalıdır!");
        }
        else
        {
            errorProvider1.SetError(this.textBoxYas, ""); // Hatayı temizle
        }
    }
}
3. Farklı Hata İkonu Kullanımı

ErrorProvider'ın varsayılan ikonunu değiştirebiliriz.

using System.Windows.Forms;
using System.Drawing; // Icon için

public partial class Form1 : Form
{
    private ErrorProvider errorProvider1;
    private TextBox textBoxEmail;

    public Form1()
    {
        InitializeComponent();
        errorProvider1 = new ErrorProvider();
        errorProvider1.BlinkStyle = ErrorBlinkStyle.AlwaysBlink; // İkon sürekli yanıp sönsün

        // Özel bir ikon yükle (örneğin, bir uyarı ikonu)
        try
        {
            errorProvider1.Icon = new Icon(SystemIcons.Warning, 16, 16); // Sistem uyarı ikonu
        }
        catch (Exception ex)
        {
            MessageBox.Show("Özel ikon yüklenirken hata oluştu: " + ex.Message);
        }

        this.textBoxEmail.TextChanged += new EventHandler(textBoxEmail_TextChanged);
    }

    private void textBoxEmail_TextChanged(object sender, EventArgs e)
    {
        // Basit bir e-posta formatı kontrolü
        if (!this.textBoxEmail.Text.Contains("@") || !this.textBoxEmail.Text.Contains("."))
        {
            errorProvider1.SetError(this.textBoxEmail, "Geçerli bir e-posta adresi girin!");
        }
        else
        {
            errorProvider1.SetError(this.textBoxEmail, "");
        }
    }
}

Dikkat Edilmesi Gerekenler

  • Doğrulama Mantığı: ErrorProvider sadece görsel bir geri bildirim aracıdır. Asıl doğrulama mantığını (boşluk kontrolü, format kontrolü, aralık kontrolü vb.) kodunuzda kendiniz yazmalısınız.
  • Olay İşleyicileri: Genellikle TextChanged, Validating veya Validated gibi olaylarda ErrorProvider.SetError() metodunu çağırarak doğrulama yaparsınız. Validating olayı, kontrol odağı kaybettiğinde tetiklendiği için daha kapsamlı doğrulamalar için uygun olabilir.
  • Hata Temizleme: Kullanıcı hatayı düzelttiğinde ErrorProvider.SetError(control, "") çağırarak hata ikonunu temizlemeyi unutmayın.
  • Performans: Çok sayıda kontrol üzerinde sürekli doğrulama yaparken performans sorunları yaşamamak için doğrulama mantığınızı optimize edin.
---

Evet sevgili Webkolog.net okurları, bu yazımızda C# .NET Framework 4 ile ErrorProvider kontrolünün temel özelliklerini, metotlarını ve kullanım senaryolarını detaylı bir şekilde inceledik. ErrorProvider, uygulamalarınızda kullanıcı giriş hatalarını görsel olarak belirtmek ve kullanıcı deneyimini iyileştirmek için etkili bir araçtır. Formlarınızdaki veri girişlerini daha sağlam ve kullanıcı dostu hale getirmek için bu kontrolü etkin bir şekilde kullanabilirsiniz. Umarım bu rehber, C# .NET Framework 4 ile uygulamalar geliştirirken size yardımcı olur. Bir sonraki yazımda, C# dilinin diğer önemli yapı taşlarını keşfetmeye devam edeceğiz. Webkolog.net'i takipte kalın!

Hepinize hatasız ve başarılı geliştirme süreçleri dilerim!

0 yorum:

Yorum Gönder