C# Dersleri 31 - Eventler

     Kullanıcı uygulamanızda bir butona tıkladığında, imleci hareket ettirdiğinde, klavyesindeki tuşlara bastığında uygulamanızın bunu yakalayıp buna uygun işlemler yapmak istersiniz. Bu konuda  C# dilinde eventleri kullanabilirsiniz. Aslında daha önceki makalelerde eventleri defalarca kullandık ancak ne olduğundan tam bahsetmedik. Örneğin bir Button'a çift tıklayınca Visual Studio'nun otomatik oluşturduğu kodlar, Button classının Click eventidir. Ve bu event, kullanıcı Button'a tıkladığında tetiklenir. 

     Visual Studio'da kullandığımız, kontroller için oluşturulmuş hazır eventler vardır. Ancak bunlar her zaman bize yeterli gelmez. Biz de eventler yazmak isteriz çoğu uygulamamızda.

     Event Tanımı Yapmak

     Bir event tanımlarken öncelikle eventimiz için bir delegate oluşturmak gerekiyor. "Delegate ne?" diyorsanız bu makaleye bakabilirsiniz.     

public delegate void Message(double note);

     Double parametre alan ve void tipinde bir delegate oluşturdum. Artık event keywordunu kullanarak bir event oluşturabiliriz. Student isminde bir class oluşturuyorum. Classtaki propertylerden birisi "FinalNote". FinalNote propertysinde değişiklik olduğunda tetiklenecek bir event yazalım. Önce event tanımıyla başlıyoruz.     

class Student
{
    public event Message OnNoteChanged;

    public int StudentNo { get; set; }
    public string Name { get; set; }
    private double _note = 0;
    public double FinalNote
    {
        get
        {
            return _note;
        }
        set
        {
            _note = value; 
        }
    }

     Event "tipi" olarak delegate veriyoruz gibi düşünebilirsiniz. Şimdi gelelim bu eventin nasıl tetikleneceğine. Yukarıda da belirttiğim gibi "FinalNote" propertysinde değişiklik olunca tetiklensin istiyorum bu method. Dolayısıyla FinalNote propertysinin set methodunda tanımlamasını yapmalıyım.     

class Student
{
    public event Message OnNoteChanged;

    public int StudentNo { get; set; }
    public string Name { get; set; }
    private double _note = 0;
    public double FinalNote
    {
        get
        {
            return _note;
        }
        set
        {
            _note = value;
            OnNoteChanged(FinalNote);
        }
    }
}

     FinalNote propertysinin set methodunda OnNoteChanged eventinin çağırılmasını istiyorum. Bu eventin delegatesini void ve double parametre alacak şekilde tanımladığımız için bu evente de double parametre vermemiz gerekiyor. FinalNote değerini veriyorum parametre olarak. 

     Forma dönelim. Kullanıcı formdaki Button'a tıklayınca Student classının nesnesini oluşturup, OnNoteChanged eventinin de tetiklenmesini sağlayacağım.     

private void btnClick_Click(object sender, EventArgs e)
{
    Student s = new Student();
    s.OnNoteChanged += S_OnNoteChanged;
    s.Name = "Emre Yıldırım";
    s.StudentNo = 2038;
    s.FinalNote = 67;
}

private void S_OnNoteChanged(double note)
{
    MessageBox.Show("Final notu değiştirildi! Yeni not : " + note);
}

     Delegateye method eklerken "+=" operatörümüzü kullanıyorduk. Burada da öyle düşünün. "s.OnNoteChanged += S_OnNoteChanged;" kod cümlesinde oluşturduğumuz evente bir method ekliyoruz. Method ismi S_OnNoteChanged. Eğer bir event isminden sonra "+=" yazıp iki defa tab tuşuna basarsanız sizin için otomatik bir method oluşturacaktır pek düşünceli Visual Studio. Daha sonra bu methoda, FinalNote değişkeninde değişiklik yapıldığında olması gereken işlemi kodlamalısınız. Benim örneğimde, "Final notu değiştirildi" şeklinde bir uyarı çıkarıp yeni final notunu belirtiyorum.

     Projeyi buradan indirebilirsiniz.

YORUMLAR
Email Adresi *
Görüntülenecek İsim *
Yorum *
Paylaş
  • f