1. Ana Sayfa
  2. C Sharp

C# Event Kullanımı Detaylı İnceleme

C# Event Kullanımı Detaylı İnceleme
+ - 0

Merhabalar, C# Event Kullanımı Detaylı İnceleme dersim ile C# eğitim setime devam ediyoruz. C# Event Kavramları yazımda eventlerden zaten bahsetmiştim ancak bana gelen sorular arasında eventler hakkında da sorular olduğundan bu konuyu biraz daha detaylandırmak istedim. Bilgilerim ve deneyimlerim dahilinde bu konuyu biraz daha irdeleyeceğiz.

Yazıya başlamadan önce bir bilgi vermek istiyorum. Ben bu eventlerin çalışma şekillerini öğrenirken forma bir ListBox ekledim ve öğrenmek eventleri oluşturup bu listbox’a event adında bir item ekledim. Böylece hangi eventin hangi aşamada çalıştığını görebiliyorum.

C# Event Kullanımı Detaylı İnceleme

C# Events Nedir?

İlk olarak C# events nedir sorusuna cevap verelim. Events kelimesi Olay, Eylem gibi anlamlara gelmektedir. Yani bir nesne üzerinden yapılan çeşitli eylemleri temsil eder. Örneğin Form nesnesinin Load eventi, Closed, Closing, Click gibi eventleri vardır. Bu eventler kullanıcı ile form arasında gerçekleşen etkileşimlerine bağlı olarak farklı farklı işlemleri yönetmemize olanak sağlar.

C# Event Kullanımı

Form nesnesinden yola çıkalım ve sık kullanılan eventlerine bir göz atalım.

Load Eventi: Load, yükleme anlamına gelir. Load eventi, Form nesnesi üretilip açıldıktan sonra tetiklenir. Bu event içerisine yazdığımız kodlar Form karşımıza gelmeden önce çalıştırılmış olurlar.

FormClosing Eventi: FormClosing , Kapanış anlamına gelir. Form nesnesinin sağ üst köşesindeki çarpıya tıkladığımızda ya da bir başka bir şekilde formu kapatma eylemine başladığımız anda çalışır. FormClosing Eventi içerisine yazılan kodlar, Form nesnesi kapatılırken yani kapatma eylemi ile aynı anda çalışır.

FormClosed Eventi: FormClosed , Kapalı anlamına gelir. Form nesnesinin sağ üst köşesindeki çarpıya tıkladığımızda ya da bir başka bir şekilde formu kapatma eylemi tamamlandıktan sonra çalışır. FormClosed Eventi içerisine yazılan kodlar, Form nesnesi kapandıktan sonra çalışır.

Click Eventi: Click, Tıklama anlamına gelir. Form üzerinde bir noktaya fare ile tıklandığında çalışır. Bu event fare üzerindeki herhangi bir tuşa tıklandığında çalışır. Diyelim ki çok tuşlu bir gaming fareniz var. O fare üzerindeki tüm tuşlar bu click eventini tetikler.

DoubleClick Eventi: DoubleClick çift tıklama anlamına gelir. DoubleClick eventi, Click eventi ile tamamen aynıdır. Tek fark çift tık yapıldığına çalışır.

C# Diğer Genel Eventler

Genel olarak çoğu nesnenin sahip olduğu diğer eventlere kısa bir bakış atalım.

TextChanged Eventi: TextChanged, yazı değiştiğinde anlamına gelir. Button, TextBox gibi üzerinde text yazan tüm nesneler için kullanılabilir. Bu event içerisine yazılan kodlar, bağlı oldukları nesnenin sahip olduğu text değiştiğinde tetiklenir.

SelectedIndexChanged Eventi: SelectedIndexChanged, Seçili Olan İndex (item) Değiştiğinde anlamına gelir. Bu event bize listeler veren nesneler için kullanılabilir. Bunlar ComboBox, ListBox gibi nesnelerdir. Bu event içerisine yazılan kodlar (örn ComboBox) bağlı olduğu nesnedeki seçili olan item değiştirildiğinde tetiklenir.

KeyDown Eventi: KeyDown, tuş aşağıya inerken tetiklenecek eventtir. Klavyeden bir tuşa basılı tuttuğunuz sürece bu event sürekli olarak tetiklenir. Dikkat! Sürekli çalışır.

KeyPress Eventi: KeyPress, tuş aşağıda iken tetiklenecek eventtir. Klavyeden bir tuşa basılı tuttuğunuz sürece bu event sürekli olarak tetiklenir. Dikkat! Sürekli çalışır.

KeyUp Eventi: KeyUp, elinizi tuştan çekerken tetiklenecek eventtir. Klavyeden bir tuşa basıp elinizi çektiğinizde bu event tetiklenir.  Dikkat! Bir kere çalışır.

Leave Eventi: Leave, ayrılmak anlamına gelir. Focus olunan yani odaklanılmış olan nesneden başka bir nesneye focus olduğunuzda bu event tetiklenir.

 

 

MouseClick Eventi: Sadece fare, ile yapılan tek tıklamalarda tetiklenir.

MouseDoubleClick Eventi: Sadece fare, ile yapılan çift tıklamalarda tetiklenir.

MouseDown Eventi: Sadece farenin, bir tuşuna basılırken tetiklenir.

MouseEnter Eventi: Sadece fare, bu eventin bağlı olduğu nesnenin üzerine gelince tetiklenir.

MouseHover Eventi: Sadece fare, bu eventin bağlı olduğu nesne üzerine geldiğinde ve üzerinden ayrıldığında tetiklenir.

MouseMove Eventi: Sadece fare, bu eventin bağlı olduğunu nesne üzerinden gezindikçe tetiklenir. Her bir piksel geçişinde tetiklenmektedir.

MouseUp Eventi: Sadece farenin, basılı olan tuşu bırakıldığında tetiklenir..

Kendi Eventlerimizi Üretelim.

Buraya kadar genel olarak bazı eventleri inceledik. Ayrıca ne iş yaptığını ve hangi sırada çalıştıklarını izleyebileceğimiz bir yöntemi görmüş olduk. Şimdi konuyu bir adım daha ileri taşıyacağız. Şimdi kendi eventimizi üreteceğiz.

Event üretme işleminin Visual Studio üzerinde kısayolu vardır. Örnek olarak bir Form nesnesi için bir Click eventi üretmek istediğimizi düşünelim. Aşağıdaki kodları yazalım.

this.Click +=

Buraya kadar yazdıktan sonra klavyemizden TAB+TAB tuş kombinasyonunu yapıyoruz ve event otomatik olarak üretiliyor. Kodların son durumu aşağıdaki gibi oluyor.

       private void Form1_Load(object sender, EventArgs e)
        {
            this.Click += Santranc_tahtasi_Click;     
        }

        private void Form1_Click(object sender, EventArgs e)
        {
            throw new NotImplementedException();
        }

Burada dikkat edilmesi gereken konu, biz burada dinamik olarak bir event ürettik. Form’un özellikleri sayfasındaki eventler bölümüne gidip bakarsak bu eventi orada göremeyiz. Şayet eventler bölümünden daha önce zaten bir Click eventi tanımlamışsak ne olacak?

İki eventte aktif olarak çalışacaktır. Yani Form1 nesnesinin iki farklı Click eventi olacaktır. Burada ilk çalışacak olan event, Form1’in özellikler sayfasındaki eventler kısmında tanımlanmış olan Click eventi olacaktır. Aşağıdaki kodlara baktığımızda Form1 nesnesinin iki Click eventi olduğu görülüyor. İsimlerini aynı görünebilir ama sonradan dinamik olarak ürettiğimiz click eventindeki form1’in ilk harfi küçük olduğundan farklı eventler olarak algılanıyor.

        private void Form1_Load(object sender, EventArgs e)
        {
            this.Click += form1_Click;     
        }
        private void form1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("click 1");
        }
        private void Form1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("click 2");
        }

Bu durumda Form1 üzerinde faremizle Click yaptığımızda ilk olarak click 2 sonrasında click 1 mesajı karşımızda gelecektir. Bunun sebebi ise, Özellikler sayfasındaki Eventler bölümünden eklediğimiz event Form1.designer.cs sayfasına ekleniyor olmasıdır. Form1 daha karşımıza gelmeden önce Form1’in Click eventi Form1_Click adlı eventi olarak ayarlanmış oluyor. Form üretilip karşımıza geldikten sonra biz form1_Click adında başka bir event ataması yaptığımız için, sonradan eklenen Click eventi çalışma sırasında ikinci sırada oluyor.

Bu özellik, üzerinde button olan bir user control kullandığınızda en çok işinize yarayacaktır. User Control içindeki buttona bir click eventi atayabilir ve user control içerisinde yapılması gereken işlemleri yaptıktan sonra, user controlü eklediğiniz formda, user control içindeki butona bir click eventi daha atayarak, içinde yer aldığı forma özel işlemler yaptırabilirsiniz.

 

Birden Fazla Nesnede Tek Event

Şimdi event konusunu bir adım daha ileri taşıyacağız. İlk olarak genel eventleri gördük. Sonrasında dinamik olarak event üretmeyi ve bir nesne için aynı eventten birden fazla kullanımını gördük.  Bu kısımda bir eventi birden fazla nesne için kullanmayı göreceğiz. Ancak bu konuyu burada uzun uzadıya anlatmak istemiyorum çünkü zaten giriş kısmında verdiğim derste detaylıca anlatmıştım.  Aşağıda bağlantıyı görebilirsiniz.

C# Event Kavramları


C# Event Kullanımı Detaylı İnceleme dersi de bu kadarı arkadaşlar. Umarım faydalı olmuştur. Aklıma gelen her türlü detayı vermeye çalıştım. Eğer aklınıza takılan bir nokta olursa yorum atmaktan çekinmeyin.

C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız. Derslerime özel olarak hazırladığım Github Projeme bu bağlantıdan ulaşabilirsiniz…

Sağlıcakla ve takipte kalın. ?

Bu yazıya tepkiniz ne oldu?

Yazar Hakkında

Lise Ağ Sistemleri ve Yönetimi bölümü, üniversite Bilgisayar Programcılığı bölümü Ön Lisans, Yönetim Bilişim Sistemleri Lisans öğrenimi aldım. Askerlik görevimi tamamladım. Uzmanlık alanım; C# ve SQL Programlama dilleri ile müşteri odaklı, kullanıcı dostu ERP ve CRM gibi sistemleri geliştirmektir. Ayrıca şuanda PHP ve MYSQL alanında projeler geliştirmekteyim. C++, Phyton, Xamarin, MVC gibi konuları öğrenmek ve kendimi geliştirme çabası içerisindeyim. Discord için: https://discord.gg/FBxZeHu9

Değerli yorumlarınızı bekliyorum. :)