Bazı durumlarda kendine has HTML kodları üreten kontrollere ihtiyaç duyabiliriz. Bunun için mevcut kontrollerden veya mevcut kontrollerin miras yoluyla türetildiği webcontrol (System.Web.UI.WebControls.WebControl) sınıfından kendi kontrollerimiz türetme yoluna gidebiliriz.
Bu işleme başlamak için öncelikle bir sınıf kütüphanesi projesine ihtiyacımız var. Bu projemizin adı "MyControl" olsun.
Sonraki adımda kontrolümüzün adını taşımasını istediğimiz bir sınıf dosyasını projemize eklememiz gerekecektir. Diyelim ki bu sınıfımızın adı da "BasitKontrol" olsun.
Bu kontrolümüz basitçe bir özellik ile verilen metni ekrana yazdıran bir kontrol olsun. Bu işi yapan label kontrolü var dediğinizi duyar gibiyim. Evet öyle bir kontrol var ama basit güzeldir…
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace MyControl
6 {
7 class BasitKontrol
8 {
9 }
10 }
1 using System;
2 using System.Web.UI;
3 using System.Web.UI.WebControls;
4 using System.ComponentModel;
Sınıf tanımını yapan kod satırında görüldüğü üzere varsayılan sınıf erişimcisi private olduğundan bu sınıf dışarıdan erişilebilir bir sınıf olmayacaktır. Erişilebilir kılmak için sınıfımızı "public" olarak işaretleyelim
1 public class BasitKontrol
2 {
3 }
Artık bu sınıf dosyası için şu adımları takip ederek kontrolümüzü oluşturmaya başlayabiliriz…
Öncelikle ihtiyacımız olan özelliklere göre sınıfımızın hangi kontrol sınıfından miras alacağını belirtmemiz gerekmekte.
1 public class BasitKontrol : System.Web.UI.WebControls.WebControl
Sonra sınıfa ait ayarlanması gereken "DefaultProperty" ve "ToolboxData" attribute değerleri ayarlanmalıdır.
1 [DefaultProperty("Text"), ToolboxData("<{0}:BasitKontrol runat=server>")]
2 public class BasitKontrol : System.Web.UI.WebControls.WebControl
3 {
4 }
Artık kontrolde kullanacağımız özellik (property) ve özel veri alanı (private data field) tanımını yapabiliriz. Bu tanımı yaparken özelliğin Visual Studio 2005 "Properties (F4)" penceresinde ne şekilde görüneceği ile ilgili attribute değerlerini ayarlamam gerekecek.
1 private string metin;
2
3 [Bindable(true), Browsable(true), Category("Appearance"), DefaultValue(""), Description("Gösterilecek metin…")]
4 public string Metin
5 {
6 get { return metin; }
7 set { metin = value; }
8 }
1 protected override void Render(HtmlTextWriter output)
2 {
3 output.Write(this.metin);
4 }
1 using System;
2 using System.Web.UI;
3 using System.Web.UI.WebControls;
4 using System.ComponentModel;
5
6 namespace MyControl
7 {
8 [DefaultProperty("Metin"), ToolboxData("<{0}:BasitKontrol runat=server>")]
9 public class BasitKontrol : System.Web.UI.WebControls.WebControl
10 {
11 private string metin;
12
13 [Bindable(true), Browsable(true), Category("Appearance"), DefaultValue(""), Description("Gösterilecek metin…")]
14 public string Metin
15 {
16 get { return metin; }
17 set { metin = value; }
18 }
19
20 protected override void Render(HtmlTextWriter output)
21 {
22 output.Write(this.metin);
23 }
24 }
25 }
Bu projeyi derlediğimizde çıktı bir .dll dosyası olacaktır. Bu .dll dosyayı kendi web uygulaması projelerimde referans olarak vererek yarattığım kontrolü kullanabilirim…
Referans olarak eklediğinizde bir .aspx sayfasındayken araç kutunuzdan oluşturduğunuz kontrolü sürükle-bırak ile sayfanıza ekleyebilirsiniz. (Toolbox içinde görünmüyorsa öncelikle buraya eklemeniz gerekir.) Daha sonra "Metin" özelliğini ayarlayarak kontrolün işleyişini test edebilirsiniz.
Örnek bir web form sayfası şu şekilde görünecektir
İsterseniz kontrolün "Metin" özelliğini çalışma zamanında da ayarlayabilirsiniz. Örnek sayfamızın geri-kod (code-behind) bölümü şu şekilde görünecektir.
1 using System;
2 using System.Data;
3 using System.Configuration;
4 using System.Web;
5 using System.Web.Security;
6 using System.Web.UI;
7 using System.Web.UI.WebControls;
8 using System.Web.UI.WebControls.WebParts;
9 using System.Web.UI.HtmlControls;
10
11 public partial class _Default : System.Web.UI.Page
12 {
13 protected void Page_Load(object sender, EventArgs e)
14 {
15 BasitKontrol1.Metin = "Burada metin özelliğini çalışma zamanında ayarlıyorum…";
16 }
17 }
Klavyeleriniz şen ola…