28 Oca 2016

Visual Studio Designer.cs Yapısı ve Event Kavramı

Visual Studio, biz formun özelliklerini(text, name vs.) değiştirdikçe ve forma bileşen ekleme, çıkarma yaptıkça Designer.cs'de ki koda müdahale ediyor.(Visual Studio'nun ilk yıllarında designer dosyası buradaki gibi ayrı bir dosya değil Form1.cs içerisinde bulunuyormuş. Karmaşa ve kod kalabalığına engel olmak için bu yöntem benimsenmiş.) Böylece Visual Studio'nun oluşturduğu kod ile kendi yazdığımız kod karışmıyor.
Visual Studio'da File -> New -> Project -> W'ndows Forms Application adımlarını izleyerek yeni bir Form uygulaması açtım. Form1'in üzerine ToolBox'tan bir tane button sürükleyip bıraktım. Ardından butona çift tıklayınca, button1'in click event'i açıldı. Solution Explorer -> Form1.cs -> Form1.Designer.cs adımlarını izleyerek Designer dosyasına ulaştım.
namespace WindowsFormsApplication1
{
    partial class Form1
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.button1 = new System.Windows.Forms.Button();
            this.SuspendLayout();
            // 
            // button1
            // 
            this.button1.Location = new System.Drawing.Point(78, 79);
            this.button1.Name = "button1";
            this.button1.Size = new System.Drawing.Size(75, 23);
            this.button1.TabIndex = 0;
            this.button1.Text = "button1";
            this.button1.UseVisualStyleBackColor = true;
            this.button1.Click += new System.EventHandler(this.button1_Click);
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(286, 264);
            this.Controls.Add(this.button1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.Button button1;
    }
}


  • Burada; partial class Form1'de ki partial ifadesi, Form1 sınıfının kodunun bir parçasının, bu dosya içinde yer aldığını belirtir. 
  • Visual Studio bizim için form'un bileşenlerini tanımlamış ve Form kapanırken çağrılacak Dispose metodunu oluşturmuş.
  • InitializeComponent ismindeki ayrı bir metotta ise formun üzerindeki bileşenlerin ve form ayarlarının kodları yer alıyor. (Biraz önce ToolBox'tan sürükleyip bıraktığımız Button ile ilgili kısmını başta görebiliriz.)
  • Öncelikle aşağıdaki kod ile bir buton sınıfı koyası button1 değişkenine alınmış. Daha sonra ise button1'in özellikleri verilmiş. Burada kullanılan this ifadesi button'un Form1 sınıfına ait olduğunu söylüyor. 
            this.button1 = new System.Windows.Forms.Button();
"Hangi sınıf içindeyseniz this ifadesi o sınıfı işater eder. Genellikle farklı sınıflar içindeki aynı isme sahip değişkenlerin karışmasını önlemek için kullanılır.
  • Aşağıdaki kod ise, bu butonun Click olayının, bu Form içindeki button1_Click metoduya işleneceği söylenir. Button1'e ne zaman tıklansa, program akışı bu metodun içindeki kod parçasından devam edecek.
this.button1.Click += new System.EventHandler(this.button1_Click);
  •  Visual Studio bizim için aşağıdaki 2 satır kodu ekleyerek butonun tıklama olayına bir işleyici (handler) metod atıyor;
  • this.button1.Click += new System.EventHandler(this.button1_Click);
    private void button1_Click(object sender, EventArgs e)
            {
    
            }
    
Visual Studio'da bulunan bileşenlerin birden fazla event'i (olayı) ve birden fazla event handler'ı (olay dinleyicisi veya işleyicisi) olabilir.
Şimdi Form1'ün üzerine Toolbox'tan bir tane TextBox atalım. Ve textBox1 seçili iken Properties sekmesinden, şimşek simgesi ile gördüğümüz event bölümünü açarsak  textBox'a ait kullanabileceğimiz tüm event'leri (olayları) orada göreceğiz. Bu eventlerin tek tek ne işe yaradıklarını ezberlememize gerek yoktur. Zaten bir çoğu adından anlaşıacaktır. Ayrıca eventler seçili iken aşağıda da bu eventlerin kısa açıklamaları çıkacaktır.
Farz edelim click eventi ile button1_Click metodunun eşleşmesini istemiyoruz, bu durumda Click event'inin yanında gözüken oka basarak onu varsa kendi yazdığımız bir metot ile de eşleştirebiliriz. Bu kutulara çift tıklarsak da Visula Studio yine biraz önceki gibi bizim için event oluşturacaktır.

Örnek bir uygulama yapalım; textBox1'in Click ve KeyUp event kutularına çift tıklarsak aşağıdaki event'ler açılacaktır. Click, o textBox'a tıklanıldığında harekete geçer. KeyUp ise o textBox üzerinde klavyeden bir tuşa basılıp, parmak o tuştan çekildiğinde harekete geçer. (Tuşa bastığımızda harekete geçmesini istersek KeyDown event'ini kullanmalıyız.)
private void textBox1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("TextBox1'e tıkladınız.");
        }
private void textBox1_KeyUp(object sender, KeyEventArgs e)
        {
            this.Text = textBox1.Text;
        }
Üstteki metotta TextBox'a tıkladığımız anda karşımıza bir mesaj kutusu gelecek ve bize TextBox1'e tıkladınız. diye bir uyarı verecektir.
Alttaki metot ise bu textBox'a yazdığımız her harften elimizi çektikten sonra o harfin ya da kelimenin Form1'in text'ine yani başlık özelliğine eşitleneceğini gösterir.
Ekran Görüntüsü:


Bu durumda Form1.Designer.cs'yi açarsak Buton'da olduğu gibi  TextBox için de benzeri satırların mevcut olduğunu göreceğiz.

Hiç yorum yok:

Yorum Gönder