Kendi Sunucu Kontrollerimizi Oluşturmak

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 }

 
Gerekli olan isim alanlarını ekleyelim, gereksiz olanları çıkartalım. Sonuç olarak senaryomuz için gerekli using ifadeleri şöyle oluşacaktır

    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.

Not: İlgili attribute değerlerinin hemen sınıf tanımı üzerinde yapılması gerektiğini unutmayın

    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 }

 

 
Bu aşamada webcontrol sınıfının (ya da bu sınıftan türetilmiş sınıfların) HTML çıktıyı biçimlendirmek, oluşturmak için kullandığı "Render" metodunu tekrar kodlayacağız.

    1 protected override void Render(HtmlTextWriter output)

    2 {

    3     output.Write(this.metin);

    4 }

 

 
Böylece kontrol tanımının sonuna gelmiş oluyorum. Sonunda elinizdeki kod şöyle birşeye benzemeli

    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

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 
<%@ Register Assembly="MyControl" Namespace="MyControl" TagPrefix="cc1" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head id="Head1" runat="server"> 
    <title>Basit Kontrol Test</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
        <div> 
            <cc1:BasitKontrol ID="BasitKontrol1" runat="server" Metin="Merhaba Dünya…" /> 
        </div> 
    </form> 
</body> 
</html>

İ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…

Yazı oluşturuldu 141

Bir yanıt yazın

Benzer yazılar

Aramak istediğinizi üstte yazmaya başlayın ve aramak için enter tuşuna basın. İptal için ESC tuşuna basın.

Üste dön