Ortak Event

Projelerinizi hazırlarken bazen  tekrarlı işlemler yaptığımız nesnelerimiz olabilir. Bu genellikle buton olaylarında ortaya çıkabilir.

Örneğin butona tıklandığında buton üzerinde yazan bilginin kullanılması gereken zamanlarda bu durum daha da ön plana çıkar. Buton üzerinde "+","-" v.s. gibi semboller varsa aritmetiksel işlemi gerçekleştirilsin gibi. Ya da Rakamlar varsa şifre girişi yapılsın gibi. 

İşte bu olaya Ortak Olay(Event) kullanma diyoruz. Ortak EVent ile "Sender" kullanımı ön plana çıkar. Sender bir olay metodu oluştuğunda karşımıza çıkan Object(Nesne) tipinde bir değişkendir. Nesnelerin özelliklerini barındırır.

 private void RakamYaz(object sender, EventArgs e)

Bu işlemi size hesap makinesi yapmaya çalışarak anlatmaya çalışacağım. 

Aşağıdaki gibi bir hesap makinesi formu tasarlayalım.


Adım adım işlemlerimizi yapalım.

1. Label1 nesnesinin Dock özelliğini Properties panelinden Right yapalım. ve Labelin Text özelliğini silelim. Böylece yapılan işlemler sola doğru uzayıp gider ve Label1 ifadesi gözükmez..



2.Textboxın  TextAlign özelliğini Right yapalım.



3.Rakamların olduğu butonları Ctrl tuşuna basarak fare yardımıyla seçelim ve Prpperties Penceresinde Events butonuna tıklayıp Click olayını bulalım ve olaya isim verelim. Ben RakamYaz ismini verdim. Enter tuşuna basalım. Kod penceresi açılacaktır.


Şu kodu yazalım. Böylece her rakama kod yazmamış olduk. İşte ortak event özelliğinin faydası.

 bool durum = false;
 double sonucson = 0;
 string gecici = "";
 private void RakamYaz(object sender, EventArgs e)
 {
     if (sonuctxt.Text == "0" || durum)
     {
         sonuctxt.Clear();
     }
     durum = false;
     Button btn = (Button)sender;   //Butonu sender olarak ayarladık.
     sonuctxt.Text += btn.Text;     //Rakamlara tıklandığında üzerindeki bilginin textkutusuna yazılmasını sağladık.

 }


4.  İşlem butonlarının olduğu tüm butonları seçtik. Events butonuna tıkladık ve Click olayına islemler adını verdik.Enter tuşuna bastık.


 private void islemler(object sender, EventArgs e)
 {
     durum = true;
     Button btn = (Button)sender;
     string yeni = btn.Text;
     label1.Text = label1.Text + " " + sonuctxt.Text + " " + yeni;
     switch (gecici)
     {
         case "+"  : sonuctxt.Text = (sonucson + double.Parse(sonuctxt.Text)).ToString(); break;
         case "-"  : sonuctxt.Text = (sonucson - double.Parse(sonuctxt.Text)).ToString(); break;
         case "x"  : sonuctxt.Text = (sonucson * double.Parse(sonuctxt.Text)).ToString(); break;
         case "/"  : sonuctxt.Text = (sonucson / double.Parse(sonuctxt.Text)).ToString(); break;
         case "%"  : sonuctxt.Text = (sonucson * double.Parse(sonuctxt.Text)/100).ToString(); break;
         case "1/x": sonuctxt.Text = (1 /  double.Parse(sonuctxt.Text)).ToString(); break;
         case "√"  : sonuctxt.Text = Math.Sqrt(double.Parse(sonuctxt.Text)).ToString(); break;
         case "X²" : sonuctxt.Text = Math.Pow(double.Parse(sonuctxt.Text),2).ToString(); break;
         case "X³" : sonuctxt.Text = Math.Pow(double.Parse(sonuctxt.Text), 3 ).ToString(); break;
         case "xʸ" : sonuctxt.Text = Math.Pow(sonucson, double.Parse(sonuctxt.Text)).ToString(); break;
     }
     sonucson = double.Parse(sonuctxt.Text);
     sonuctxt.Text = sonucson.ToString();
     gecici = yeni;
 }

5. CE butonunun kodu;

 private void button5_Click(object sender, EventArgs e)
 {
     sonuctxt.Text = "0";
 }

6.C butonunun kodu;
private void button10_Click(object sender, EventArgs e)
{
    sonuctxt.Text = "0";
    label1.Text = "";
    gecici = "";
    sonucson = 0;
    durum = false;
}

7. (.) nokta butonun kodu;
 private void button17_Click(object sender, EventArgs e)
 {
     if (sonuctxt.Text == "0")
     {
         sonuctxt.Text = "0";
     }
     else if (durum)
     {
         sonuctxt.Text = "0";
     }
     if (!sonuctxt.Text.Contains("."))
     {
         sonuctxt.Text += ",";
     }
     durum = false;
 }

8. (=) eşittir butonun kodu;
 private void button15_Click(object sender, EventArgs e)
 {
     label1.Text = "";
     durum = true;
     switch (gecici)
     {
         case "+"  : sonuctxt.Text = (sonucson + double.Parse(sonuctxt.Text)).ToString(); break;
         case "-"  : sonuctxt.Text = (sonucson - double.Parse(sonuctxt.Text)).ToString(); break;
         case "x"  : sonuctxt.Text = (sonucson * double.Parse(sonuctxt.Text)).ToString(); break;
         case "/"  : sonuctxt.Text = (sonucson / double.Parse(sonuctxt.Text)).ToString(); break;
         case "%"  : sonuctxt.Text = (sonucson * double.Parse(sonuctxt.Text)/100).ToString(); break;
         case "1/x": sonuctxt.Text = (1 / double.Parse(sonuctxt.Text)).ToString(); break;
         case "√"  : sonuctxt.Text = Math.Sqrt(double.Parse(sonuctxt.Text)).ToString(); break;
         case "X²" : sonuctxt.Text = Math.Pow( double.Parse(sonuctxt.Text),2).ToString(); break;
         case "X³" : sonuctxt.Text = Math.Pow(double.Parse(sonuctxt.Text), 3 ).ToString(); break;
         case "xʸ" : sonuctxt.Text = Math.Pow(sonucson,double.Parse(sonuctxt.Text)).ToString(); break;
     }
     sonucson = double.Parse(sonuctxt.Text);
     sonuctxt.Text = sonucson.ToString();
     gecici = "0";
 }

Evet ortak event kullanımı bu şekilde kolay gelsin.




Etiketler
Sender Event
Mesaj Yaz