Özel kontrol oluşturmak (Custom Control)

Özel kontrol oluşturmak (Custom Control)

Özel kontroller (Custom Control) özgün assembliler olarak konuşlandırılırlar. Diğer ASP.Net server kontrolleri gibi kullanılırlar ve dinamik link kütüphanesi içinde (DLL) derlenirler.

Aşağıdaki seçeneklerden biri kullanılarak oluşturulabilir :

  • Dışarıdan bir özel kontrol türeterek
  • İki veya daha fazla harici kontrolü birleştirip yeni bir özel kontrol oluşturularak
  • Ana yada temel kontrol sınıfından türetilerek

Bu yapıyı yada bu kavramı tanımak için tarayıcıda basit bir mesaj gösteren özel bir kontrol oluşturalım. Aşağıdaki adımları takip ediyoruz :

Yeni bir web site yaratalım. Solution’a sağ tıklayalım. Yanlışlıkla projeye tıklamamaya dikkat edin. Aşağıdaki pencerede göründüğü gibi bir server control oluşturuyoruz.

CustomControl

Yukarıdaki adım ServerControl1 adında çağrılan eksiksiz bir özel kontrol oluşturur ve bunu solution  içerisine ekler. Bu örneğimizde bu kontrolümüzü CustomContorls olarak isimlendiriyoruz. Bu kontrolü kullanmak için önceden referans etmeliyiz. Bu işlemi gerçekleştirmek için var olan projemiz üzerine sağ tıklayarak Add Reference seçeniğini tıklıyoruz. Açılan pencereden Solution altında Projects içerisinde yer alan projemizi seçerek ekliyoruz. Eğer proje görünmüyorsa solution’a sağ tıklarayarak build ediniz.

CustomControl1

Toolbox içerisinde her hangi bir tagda Choose Items diyerek kontrolümüzü getirebiliriz. Sürükle bırak yöntemiyle istediğimiz sayfaya ekleyebiliriz.

<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”Sil.aspx.cs” Inherits=”UserControls_Sil” %>

<%@ Register Assembly=”ServerControl1″ Namespace=”ServerControl1″ TagPrefix=”cc1″ %>
<!DOCTYPE html>

<html xmlns=”http://www.w3.org/1999/xhtml”>
<head runat=”server”>
<title></title>
</head>
<body>

<form id=”form1″ runat=”server”>
<cc1:ServerControl1 ID=”ServerControl1″ text=”Server Control’den merhaba :)” runat=”server” />
</form>
</body>
</html>

Sayfa çalıştığında yazdığımız text içeriği görüntülenecektir.

Bu örneğimizde text özelliği set ediliyor. ASP.Net bu özelliği default olarak kontrol yaratıldığında oluşturuyor. Code behinde dosyasının bunu meydana getiriyor.

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Linq;

using System.Text;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

namespace CustomControls

{

   [DefaultProperty(“Text”)]

   [ToolboxData(“<{0}:ServerControl1

                  runat=server></{0}:ServerControl1>”)]

    public class ServerControl1 : WebControl

   {

      [Bindable(true)]

      [Category(“Appearance”)]

      [DefaultValue(“”)]

      [Localizable(true)]

      public string Text

      {

         get

         {

            String s = (String)ViewState[“Text”];

            return ((s == null) ? “[” + this.ID + “]” : s);

         }

         set

         {

            ViewState[“Text”] = value;

         }

      }

      protected override void RenderContents(

                                        HtmlTextWriter output)

      {

         output.Write(Text);

      }

   }

}

Yukarıdaki kodlar otomatik olarak bir custom kontrol oluşturdu. Olaylar ve metodlar custom contol sınıfına eklendi.

Şimdi örneğimizi biraz daha genişletelim ve bir örnek yapalım.

Palindromları kontol eden “checkpanlindrome” adlı bir metod oluşturuyoruz.

Palindrom; baştan ve sondan okunduğunda değeri değişmeyen kelime veya sabitlerdir. Bu örnek için basit kelimeleri ele alacağız.

Custom Control kodlarımızı aşağıdaki şekilde gibi genişletiyoruz :

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Linq;

using System.Text;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

 

namespace CustomControls

{

   [DefaultProperty(“Text”)]

   [ToolboxData(“<{0}:ServerControl1

               runat=server></{0}:ServerControl1>”)]

   public class ServerControl1 : WebControl

   {

      [Bindable(true)]

      [Category(“Appearance”)]

      [DefaultValue(“”)]

      [Localizable(true)]

      public string Text

      {

         get

         {

            String s = (String)ViewState[“Text”];

            return ((s == null) ? “[” + this.ID + “]” : s);

         }

         set

         {

            ViewState[“Text”] = value;

         }

     }

     protected override void RenderContents(

                                       HtmlTextWriter output)

     {

        if (this.checkpanlindrome())

        {

           output.Write(“Bu bir palindromdur: <br />”);

           output.Write(“<FONT size=5 color=Blue>”);

           output.Write(“<B>”);

           output.Write(Text);

           output.Write(“</B>”);

           output.Write(“</FONT>”);

        }

        else

       {

          output.Write(“This is not a palindrome: <br />”);

          output.Write(“<FONT size=5 color=red>”);

          output.Write(“<B>”);

          output.Write(Text);

          output.Write(“</B>”);

          output.Write(“</FONT>”);

       }

    }

    protected bool checkpanlindrome()

    {

       if (this.Text != null)

       {

          String str = this.Text;

          String strtoupper = Text.ToUpper();

          char[] rev = strtoupper.ToCharArray();

          Array.Reverse(rev);

          String strrev = new String(rev);

          if (strtoupper == strrev)

          {

             return true;

          }

          else{

             return false;

          }

       }

       else

       {

          return false;

       }

    }

  }

}


Kodları değiştirdiğinize projenizi build etmeyi unutmayınız. Bu işlem değişiklikleri projenize yansıtacaktır. Sayfamıza bir adet textbox ve buton ekliyoruz, butona tıklandığında bir text üreteceğiz.

<form id=”form1″ runat=”server”>

<div>

   Enter a word:

   <br />

   <asp:TextBox ID=”TextBox1″ runat=”server” style=”width:198px”>

   </asp:TextBox>

   <br />

   <br />

   <asp:Button ID=”Button1″ runat=”server”

               onclick=”Button1_Click”

               Text=”Check Palindrome” style=”width:132px” />

   <br />

   <br />

   <ccs:ServerControl1 ID=”ServerControl11″

               runat=”server” Text = “” />

</div>

</form>

Code behind :

protected void Button1_Click(object sender, EventArgs e)

{

     this.ServerControl11.Text = this.TextBox1.Text;

}

Ekran çıktısı  :CustomControl2

Kolay Gelsin.

Kaynak : http://www.tutorialspoint.com/asp.net/asp.net_custom_controls.htm

Muavenet

Web teknolojilerine merak salmış bir bilgisayar mühendisinin yazıları

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir