İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır
Zafer Teker
tekzaf@yahoo.com

C#.Net ile Bir Tarih Kontrolü (Custum Controls)

Bu örnekte bir tarih giriş kontrolü yapıyoruz. Üç yazı alanından gün,ay ve yıl giriş yapılıyor. Üzerinde ... yazılan düğmeye tıklandığında hazır bir kontrol olan Calendar kontrolü görünür hale getiriliyor. Kullanıcı bir tarih seçtiği an seçilen tarih değerleri yazı alanlarında gözükür hale geliyor. Deneme için bir "Göster" düğmesi koyduk. Düğme tıklandığında Tarih kontrolümüzden girilen tarihi alıyoruz ve bir Label kontrolünde gösteriyoruz.

Tarih Kontrolü

.Net ile birlikte bir çok kontrol gelmektedir. .Net ile birlikte kendi kontrollerinizide yaratabilirsiniz. Bunun için WebControl class'ını extend edebilir veya başka bir kontrölü (Örneğin Table) extend edebilirsiniz. Aşağıda Tarih Kontorlünün kodu bulunmaktadır.

TarihKontrol.csİndir Göster Gizle Kopar Satır Gizle Satır Göster
  1 using System;
  2 using System.Web.UI.WebControls;
  3 namespace Test
  4 {
  5   public class TarihKontrol : WebControl
  6   {
  7     private TextBox txtGun;
  8     private TextBox txtAy;
  9     private TextBox txtYil;
 10     private Button btnCalendar;
 11     private Calendar calender;
 12     public TarihKontrol(){
 13       txtGun=new TextBox();
 14       txtGun.Columns=1;
 15       txtGun.MaxLength=2;
 16       txtAy=new TextBox();
 17       txtAy.Columns=1;
 18       txtAy.MaxLength=2;
 19       txtYil=new TextBox();
 20       txtYil.Columns=3;
 21       txtYil.MaxLength=4;
 22       btnCalendar=new Button();
 23       btnCalendar.Text="...";
 24       
 25       calender=new Calendar();
 26       calender.Visible=false;
 27       
 28       Controls.Add(txtGun);
 29       Controls.Add(txtAy);
 30       Controls.Add(txtYil);
 31       Controls.Add(btnCalendar);
 32       Controls.Add(calender);
 33       btnCalendar.Click+=new EventHandler(btnCalendarTiklandi);
 34       calender.SelectionChanged+=new EventHandler(calendarSecildi);
 35     }
 36     private void btnCalendarTiklandi(object sender,EventArgs e){
 37       calender.Visible = !calender.Visible;
 38     }
 39     private void calendarSecildi(object sender,EventArgs e){
 40       DateTime secilenTarih=calender.SelectedDate;
 41       txtGun.Text=secilenTarih.Day.ToString();
 42       txtAy.Text =secilenTarih.Month.ToString();
 43       txtYil.Text =secilenTarih.Year.ToString();
 44       calender.Visible=false;
 45     }
 46     public DateTime Tarih{
 47       get{
 48         return new DateTime(Yil,Ay,Gun);  
 49       }
 50     }
 51     public int Gun{
 52       get{
 53         if(txtGun.Text!=""){
 54           return Convert.ToInt32(txtGun.Text);
 55         }else{
 56           return 0;
 57         }
 58       }
 59     }
 60     public int Ay{
 61       get{
 62         if(txtAy.Text!=""){
 63           return Convert.ToInt32(txtAy.Text);
 64         }else{
 65           return 0;
 66         }
 67       }
 68       
 69     }
 70     public int Yil{
 71       get{
 72         if(txtYil.Text!=""){
 73           return Convert.ToInt32(txtYil.Text);
 74         }else{
 75           return 0;
 76         }
 77       }
 78     }
 79   }
 80 }

5 tane Web Control kullanıyoruz. Üç TextBox bir Button ve bir de Calendar kontrolü. Bu kontrollerin hepsi kurucuda yaratılıp Control.Add() methodu ile WebControl'a eklenmektedir.

btnCalendar.Click+=new EventHandler(btnCalendarTiklandi);
calender.SelectionChanged+=new EventHandler(calendarSecildi);

ile butona ve Calendar kontrollerinin olaylarını yakalıyoruz. Buton tıklandığında calendar gözüküyorsa gizliyor, gizli ise gösteriyor. Calendar kontrolünde tarih seçildiği anda

DateTime secilenTarih=calender.SelectedDate;
txtGun.Text=secilenTarih.Day.ToString();
txtAy.Text =secilenTarih.Month.ToString();
txtYil.Text =secilenTarih.Year.ToString();
calender.Visible=false;

girilen tarihi alıyoruz. textbox'ları girilen tarihe göre dolduruyoruz ve calender kontrolünü gizliyoruz.

public DateTime Tarih{
	get{
			return new DateTime(Yil,Ay,Gun);	
	}
}

ile girilen bir tarih istenildiği zaman kontrolümüzden alınabiliyor. Test için yaptığımız aspx'te de bir düğmeye tıklandığında girilen tarihi alıp bir Label'da gösteriyoruz.

TarihKontrolTest.aspxİndir Göster Gizle Kopar Satır Gizle Satır Göster
  1 <%@ register tagprefix="gdr" namespace="Test" assembly="Test"%>
  2 <%@ Page language="c#" Codebehind="TarihKontrolTest.aspx.cs" AutoEventWireup="false" Inherits="Test.TarihKontrolTest" %>
  3 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
  4 <HTML>
  5   <HEAD>
  6     <title>TarihControl Test Sayfası</title>
  7     <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
  8     <meta content="C#" name="CODE_LANGUAGE">
  9     <meta content="JavaScript" name="vs_defaultClientScript">
 10     <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
 11   </HEAD>
 12   <body MS_POSITIONING="GridLayout">
 13     <form id="Form1" method="post" runat="server">
 14       <gdr:TarihKontrol id="ctrTarih" runat="server"></gdr:TarihKontrol>
 15       <br>
 16       <asp:Button runat="server" Text="Göster" id="Button1"></asp:Button>
 17       <br>
 18       <asp:Label runat="server" id="lblBilgi"></asp:Label>
 19     </form>    
 20   </body>
 21 </HTML>

Yarattığımız kontrolümüzü kullanmamız için

<%@ register tagprefix="gdr" namespace="Test" assembly="Test"%>

kodunu aspx'in başına koyduk. Burada gdr adında bir tag prefix'i yaratıyoruz. (gdr: godoro nun "o" ları yok). Tarih Kontrolü, Test namespace'inde ve Test.dll 'de bulunmakta olduğunu söyledik. Kullanmak istediğimiz zaman

<gdr:TarihKontrol id="ctrTarih" runat="server"></gdr:TarihKontrol>

şeklinde kullanabiliriz.

TarihKontrolTestAspx.csİndir Göster Gizle Kopar Satır Gizle Satır Göster
  1 using System;
  2 using System.Collections;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Web;
  7 using System.Web.SessionState;
  8 using System.Web.UI;
  9 using System.Web.UI.WebControls;
 10 using System.Web.UI.HtmlControls;
 11 namespace Test
 12 {
 13   public class TarihKontrolTest : System.Web.UI.Page
 14   {
 15     protected System.Web.UI.WebControls.Button Button1;
 16     protected System.Web.UI.WebControls.Label lblBilgi;
 17     protected Test.TarihKontrol ctrTarih;
 18   
 19     private void Page_Load(object sender, System.EventArgs e){}
 20     #region Web Form Designer generated code
 21     override protected void OnInit(EventArgs e)
 22     {
 23       InitializeComponent();
 24       base.OnInit(e);
 25     }
 26     
 27     private void InitializeComponent()
 28     {    
 29       this.Button1.Click += new System.EventHandler(this.Button1_Click);
 30       this.Load += new System.EventHandler(this.Page_Load);
 31     }
 32     #endregion
 33     private void Button1_Click(object sender, System.EventArgs e)
 34     {
 35       DateTime tarih=ctrTarih.Tarih;
 36       lblBilgi.Text=tarih.Day+"."+tarih.Month+"."+tarih.Year;
 37     }
 38   }
 39 }

Dosya Listesi

İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır