Web Kontrolleri ve “Olay”lar
ASP.NET ile birlikte gelen Web kontrolleri uygulama geliştiricisinin (application developer) önüne çok büyük imkanlar seriyor. Web Formları olarak da adlandırılan bu teknoloji sayesinde form tasarlamak yerini form programlamak ya da geliştirmek kavramına bırakıyor. Programcı kontrolleri istediği şekilde dizayn edip sayfaya yerleştirebiliyor, ve kontrollerin stillerini dinamik olarak değiştirebiliyor.
ASP.NET in diğer bir yeniliği ise "event-driven" olması.. Ne demek oluyor ki bu? İşin içine mantık koymadan tercüme edersek "olay-sürülen" gibi bir anlam çıkıyor aslında. Ama biz bundan olay-tetikli gibi bir şey anlayabiliyoruz. Anlamamız gerekiyor desek daha doğru olur sanırım. Yani; uygulamalar, olaylar tarafından sürülebiliyorlar. Olaylar olduğunda programcının yazdığı kodlar yerine getiriliyor.
Çok basit ve güzel bir örnek vererek "event-driven" olmanın ne olduğunu tam olarak göstermek istiyorum.
|
Sub eve_girince(s As Object, e As eventargs)
ışıklar.açık = "true" pencereler.açık = "false" haber.ver() End Sub |
"eve_girince" bir olay, ve meydana geldiğinde (occur) yerine getirilecek işler bu olaya ait Sub (alt-program) içerisinde.. Page_load ''u eve_girince olayına benzetebiliriz. İkisi de birbirine benzer olaylardır.
Olayların gidişine kendimizi daha fazla kaptırmadan asıl konumuza dönelim. Tanımlayacağımız olaylar sayesinde web kontrollerinin kendi kendilerini tetiklemelerini sağlayabiliriz. Kontrolleri kontrolümüz altına alabiliriz. Bir ListBox kontrolünde seçim yapıldığında, yapılan seçime göre başka işlerin yerine getirilmesini sağlayabiliriz mesela, ve bunun için ListBox ''un SelectedIndexChanged isimli olayını kullanırız. Ya da bir Button kontrolünün Click olayını kullanarak programı tetikleyebiliriz.
Tüm bunlar bize yazacağımız programın kullanıcının verebileceği her türlü tepkiyi hesaba katarak uygulamalar geliştirmemizi sağlar. Çeşitli Web kontrollerini ve bunlara ait olay veya yöntemleri kullanarak ziyaretçiye iş çıkarmayan, kullanışlı, görevine sadık, dinamik ve göze çok hoş görünen formlar hazırlayabiliriz. Programcının yapabilirliği artacağı için ortaya çıkan uygulama çok daha zengin olabilir.
Web kontrollerinin nasıl daha güzel görünümlü yapılabileceğinden kısaca bahsetmek ve konuya bir TextBox kontolü ile girmek istiyorum. Çünkü TextBox kontrolü
''in mirasçısı olması nedeniyle en çok kullanılacak kontrollerden birisi olacaktır. Sayfamıza bir TextBox kontrolü yerleştirmek için en basit hali ile şöyle bir kod kullanıyoruz.
|
<asp:TextBox id="txtMetin" runat="server"/>
|
Bu kodu kullanarak sayfaya koyacağımız kontrol göze hoş görünmeyeceği için programlamadan önce veya sonra makyaj yapmak gerekecektir. Web kontrollerine üç şekilde makyaj yapabiliriz. Server bu kodu derleyip client ''a gönderdiğinde karşımıza
şeklinde bir kod çıkar. Dolayısıyla sayfamızın style tanımlarında input tag ''i için belirteceğimiz her stil bu koda da uygulanacaktır. Bu demek oluyor ki; web kontrollerinin server''dan ne olarak döndüklerine göre stiller belirleyip makyaj yapabiliriz.
İkinci bir yöntem ise VS.NET ''in tercih ettiği gibi işi kontrollerin kendi içerisinde style tanımlamaları kullanmaktır. VS.NET aracılığıyla yapılan görünüm değişiklikleri koda style tag ''i ile yansıtılır. Style tag ''inin yazım kuralları ise HTML ''deki ile aynıdır.
|
<asp:TextBox id="txtMetin" runat="server"
style="Font-Family:Verdana; Font-Size: 11px;" /> |
Diğer makyaj yöntemi ise kontrolün kendi attribute lerini kullanmaktır. Fakat form içerisinde çok fazla TextBox kontrolü kullanıyorsanız hepsi için tek tek aynı attribute leri yazmak sıkıcı ve zor olabilir. Seçim size kalmış deyip TextBox kontrolünün kendi attribute lerini kullanıyor ve makyaj yapıyorum. Kod aşağıda bakmanızı bekliyor..
|
<asp:TextBox id="txtMetin" runat="server"
Font-Name="Verdana" Font-Size="8" Font-Bold="True" BorderStyle="Solid" BorderColor="Red" BorderWidth="1px" BackColor="Yellow" ForeColor="Blue" MaxLength="7" Width="90" ReadOnly="False" TextMode="SingleLine" /> |
Kullandığım 14 attribute ü görüp makyajdan nefret etmeyin sakın. Hepsini kullanmak zorunda değilsiniz, istediğiniz özelliği varsayılan (default) ayarında bırakabilirsiniz. ReadOnly özelliğinin değerini False yapmanıza gerek yok, varsayılan olarak değeri zaten False olacaktır. Veya tek satırlı bir (normal de diyebiliriz) TextBox için yeniden TextMode değeri belirtmenize gerek yoktur. Kodu çalıştırırsanız karşınıza g.saray ve f.bahçeye aynı uzaklıkta bir TextBox kontrolü çıkacaktır. TextBox da kullandığım özelliklerin ne anlama geldiğini eminim hemen anlamış ve kafanıza yazmışsınızdır. Ben yine de bazılarına kısaca değineceğim.
Font-Size : Bu özellikde kullandığım değer punto türünde, rakamın sonuna px ekleyerek pixel türünde değer verebilirsiniz.
Font-Bold : Varsayılan değeri False olan bu özelliği TextBox ''a yazılanların koyu görünmesini istediğinizde kullanabilirsiniz
BackColor : Adından da anlaşılacağı gibi kontrolün arka plan rengi..
ForeColor : Bu ise kontrolün içerdiği yazının rengi..
ReadOnly : Varsayılan değeri False olup içeriğinin ziyaretçi tarafından değiştirilememesini istediğiniz kontrollerde kullanabileceğiniz bir özellik..
TextMode : En can alıcı özelliklerden birisi.. Alabileceği üç değer var. Varsayılan değeri olan "SingleLine", TextBox ''u textarea yapan "MultiLine" ve "Password"..
Benim yukarıdaki TextBox kontrolünde kullandığım özelliklerin çoğunu diğer web kontrollerinde de kullanabilirsiniz. Font-Name, Font-Size, Font-Bold gibi özellikleri kullanarak yine çok kullanılacağını tahmin ettiğim Button, ListBox, DropDownListBox ve Label kontrollerinin görünümünü değiştirip sayfadaki duruşlarını ayarlayabilirsiniz.
Verdiğim örnek kodu bir ".aspx" dosyasına kaydedip çalıştırdığınızı tahmin ediyorum. ASP.NET motoru tarafından üretilip tarayıcıya gönderilen koda göz atarsanız TextBox için kullanılan
tag ''inin son şeklini görebilirsiniz. ASP.NET görünüm ile ilgili özellikleri tag içerisine ekleyeceği style attribute ''ü ile uyguluyor. Yani bu için html ve css ''den farklı şeyler kullanılmıyor. ASP.NET motoru kontrol içine yazılan özellikleri prosedüre göre css kodlarına dönüştürüp ilgili tag ''e ekliyor.
Bu konuyu kapatmadan önce çok faydalı olacağını düşündüğüm bir yöntemden bahsetmek istiyorum. Önce senaryoyu yazıyım. Elinizde 6 adet TextBox kontrolünüz var. Kontrollerin görünüşü veya davranışlarıyla ilgili özelliklerini tek bir değeri değiştirerek ayarlamak istiyorsunuz. 6 kontrolün özelliklerini tek tek değiştimek sıkıcı olsa gerek. Bunu kontrollerin özelliklerine istediğiniz olay içinde değer vererek yapabilirsiniz. Senaryomuz için Button,ListBox ve Label kontrolleri kullanacağız.
| ornek2.aspx | |
|
<%@ Page Language="vb" Debug="true" %>
<%@ Import Namespace="System.Drawing" %> <script language="VB" runat="server"> Sub Page_Load(Source As Object, E As Eventargs) If Not Page.IsPostBack Then With lstYazitipi.Items .Add("Arial") .Add("Verdana") .Add("Tahoma") End With With lstBuyukluk.Items .Add("8") .Add("10") .Add("12") End With With lstRenk.Items .Add("Blue") .Add("Red") .Add("Green") End With lstYazitipi.SelectedIndex = 0 lstBuyukluk.SelectedIndex = 0 lstRenk.SelectedIndex = 0 End If End Sub Sub btnYazi_onclick(Sender As Object, E As Eventargs) <html><head><title>Kontroller ve Olaylartitle>head><body> |
|
Örneğimizde gördüğünüz gibi uzun bir kod yazmamız gerekti. 3 tane ListBox, 1 ''er tane de Button ve Label kontrolleri kullandık. Tüm bu kontrolleri