18 Mayıs 2011 Çarşamba

Windows Formlarda Custom Control

Windows Formlar uzerinde uygulama gelistirirken, bazi durumlarda kendi kontrollerimizi oluşturmak isteriz. Örneğin, uygulamanızdaki tüm TextBox'lar sadece nümerik değerler girilmesi isteniyorsa, yapmamız gereken tüm textbox'lar için ayrı ayrı kod yazmak. Daha sonra değişiklik istendiğinde de 30 textbox varsa, 30'unda birden tekrar değişikliği gerçekleştirmek gerekecek. Bir kod kendini gereksiz yere, fazlasıyla tekrar ediyorsa şunu bilmeliyiz ki, o kod yanlıştır. Şimdi bu örnek için kendi TextBox'ımızı yaratıp, tüm sayfalarda bu TextBox'ı sürükleyip bırakarak, gereksiz kodlamanın önüne geçmiş olacağız.


Kodlamaya gelirsek, düşünmemiz gereken şey, oluşturucağımız TextBox'ın, TextBox sınıfından kalıtılması olmalıdır, çünkü tüm özellikleri normal TextBox ile aynı olacak. Sadece ekleyeceğimiz şeyler olacak. 


O zaman uygulamamıza yeni bir class ekleyip, onu TextBox sınıfından kalıtalım.


class NumericTextBox:TextBox

Daha sonra NumericTextBox sınıfının constructor'ında, senaryomuzu yerine getirecek eventi bulup, onu tetikliyoruz. Bu örnek için, nümerik karakter haricinde başka bir karakter girilmesin, sadece nümerik karakterlerin girişine izin verilmesini istiyorsak, kullanacağımız event KeyPress eventi olmalıdır. Bu eventi tetikledikten sonra, girilmesini istemediğimiz karakter kodlarını girip, programımızı çalıştıracağız. Yazacağımız kod şu şekilde olacaktır;

class NumericTextBox:TextBox

    {
        public NumericTextBox()
        {
            this.KeyPress += new KeyPressEventHandler(NumericTextBox_KeyPress);
        }

        void NumericTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = !char.IsNumber(e.KeyChar) && !char.IsControl(e.KeyChar); //rakam degilse giris yapamasin ve backspace,delete tarzi kontrollere de izin verilmesin
        }
    }

Şunu da hatırlamakta fayda var. Oluşturacağımız bir class'ı, herhangi bir kontrolden kalıttığımız zaman, bu classın(yani yeni kontrolümüzün-custom control-) toolbox'da en yukarıda oluşacağını hatırlatmakta fayda var.



Uygulamamızı çalıştırdığımız zaman göreceğiz ki, oluşturduğumuz TextBox'ın, diğer TextBox'lardan görünüm ve görev bakımından hiçbir farkı yok, ekstra olarak sadece rakamlara ve delete,ctrl,backspace tarzı kontrollere izin verecektir. Artık, tüm sayfalarımızda, bu TextBox'ı sürükleyip bırakarak rahatça erişebileceğimiz gibi, değişiklik yapmak istediğimiz zaman da tek bir yerden düzeltmelerimizi yapabileceğiz.

0 yorum: