Makale Özeti

Sonuçta bir custom kontrol kütüphanesine sahip olmak işleri hızlandırabiliyor, üstelik hiç de tahmin edemeyeceğiniz kadar ufak özelliklere sahip kontroller ile.

Makale

ASP.NET 2.0'da Custom WebControl'ler - I


ASP.NET 2.0'da Custom Web Control yaratmak gerçekten çok kolay. Piyasada ürün olarak satılabilecek kapasitede bir kontrol kütüphanesi yazıyorsanız başka. Sonuçta bir custom kontrol kütüphanesine sahip olmak işleri hızlandırabiliyor, üstelik hiç de tahmin edemeyeceğiniz kadar ufak özelliklere sahip kontroller ile.

Örneğin validation bir web kontrolü icin vazgeçilmez bir ozellik. İster RequiredFieldValidation ister RexExp Validation olsun her seferinde sayfaya her eklediğiniz kontrol için bir de validation kontrol eklemek ve property'lerini set etmek gerçekten zaman alan bir iş. CustomControl'lerde Validation konusuna serinin diğer makalelerinde yer vereceğim.

Proje Tipi

Custom Control geliştirmek için ister WebControl Library ister Class Library Projesi açabilirsiniz WebControl Library projesinin Class Library Projesinden aslında hiçbir farkı yok. Seçim sizin. Ben bu makalede ClassLibrary üzerinden gideceğim.
Projeyi açtıktan sonra devam etmeden önce proje referanslarında System.Web ve System.Design bileşenlerinin ekli olduğundan emin olun.

İlk olarak Custom Control için sınıfımızı ekliyoruz ve eklediğimiz sınıfı
System.Web.UI.WebControls.WebControl'den
türetiyoruz.

Buna ek olarak yerleştireceğimiz sayfada başka aynı tipte kontroller olacağını düşünerek
System.Web.UI.INamingContainer
interface'ini implement ediyoruz.

Sınıf Tanımı

Ayrıca bileşenleri direk sınıf isimleri ile çağırmak isterseniz

Using ifadeleri

ifadelerini de eklemeyi unutmayın.

VS.NET Design Mode Görünümü

Sınıf tanımında gördüğünüz Designer attribute'u bu kontrolün herhangi bir sayfadayken design modda alacağı görünümü oluşturan sınıfı belirtiyor. Yani eğer Design Modda kontrolünüze yaptığınız değişikliklerin görünüme nasıl yansıdığını görmek istiyorsanız bir de Designer sınıfı oluşturmalısınız.

Designer Tanım

ControlDesigner'dan türeyen bu sınıfın GetDesignTimeHTML() metodunu override ederek

DesignerMetod

Design Modda göreceğimiz HTML'i oluşturabiliyoruz.

Değer Atama / Alma

Örnek olarak bu kontrolümüz bir CustomTextBox olsun. Bunun için bir de TextBox ekleyelim

TextBox 

ve bu Textbox'ı encapsulate edelim

TextBox Encapsulation

Burada gördüğünüz EnsureChildControls() metodu kontrol ağacındaki kontrollerin yaratıldığından emin olmak için çağırılır.
Şimdi de dışarıdan bu textbox'daki değere ulaşabilmek için bir özellik tanımlayalım.

Value

CreateChildControls Metodu

Bu metod için kontrol ağacındaki kontroller ile ne yapacağımızı belirttigimiz yer diyebiliriz. CreateChildControls() metodunu aşağıdaki gibi override ediyoruz.

CreateChildControls()

EnsureChildControls() çağırıldığında; eğer ChildControlsCreated property'si false ise bu metod çağırılır. Dolayısıyla metodun sonuna this.ChildControlsCreated = true; ifadesini ekliyoruz

Not : Class'imiz implicit olarak INamingContainer'i implement ettigi icin TextBox'a verdiğimiz ID istemci tarafında

CustomTextBox1_txt

ID'si ile render edilecektir.

Bu projenin çıktısı olan DLL'i bir web projesinin referanslarına ekledikten sonra sayfaya

RegisterDirective

direktifini eklemeniz gerekiyor.

Daha sonra

ServerTag 
tagini ekliyoruz.

Böylece ilk CustomControl'ümüzü birçok property dahil edilebilecek halde oluşturmuş olduk. Aşağıda CustomTextBox'ımız bir butonla birlikte görüntüleniyor. Bu kadar basit bir iş için bu kadar uğraşmaya gerek var mı diyebilirsiniz. 
Bu serinin diğer makalelerinde custom kontrol'lere yapacağımız ufak eklentilerin hayatımızı nasıl kolaylaştırdığını göreceğiz.

ornek 

Yiğit Özgül