Makale Özeti

Kullanıcı Kontrolleri program kodu ve kullanıcı arabiriminin tekrar kullanılabilirliğini sağlarlar.

Makale

Kullanıcı Kontrolleri

Kullanıcı Kontrolleri Nedir?

Kullanıcı Kontrolleri program kodu ve kullanıcı arabiriminin tekrar kullanılabilirliğini sağlarlar. Kullanıcı Kontrolleri .ascx uzantısına sahiptir.

Kullanıcı Kontrolleri kullanıcı arabiriminin bölümlere ayrılıp tekrar kullanılmasında programcıya büyük kolaylık sağlar. Web Form’larında olduğu gibi code-behind dosyaları ile kodlanacağı gibi tek dosya ile de kodlanabilir.

Kullanıcı Kontrollerine doğrudan gelen istekleri .NET Framework engeller. Tek başına sunulamaz. Ancak bir Web Form içerisinde yer alarak sunulabilir.

Kullancı kontrolleri html ve program kodu birleşiminden oluşurlar. Kullanıcı Kontrolleri kendi olaylarına sahiptir. Örneğin her kullanıcı kontrollünün Page.Load olayı vardır.

Kullanıcı Kontrolleri Web Form’ları gibi code-behind yöntemi ile oluşturulabilirler ve code-behind dosyası kullanabilirler. Web Form’ larında code-behind dosyasını @Page etiketi içerisinde belirlerken Kullanıcı Kontroller’ inde @Control etiketi kullanılır. Her .ascx sayfasında sadece bir tane @Control etiketi kullanılabilir. @Control etiketi sadece Kullanıcı Kontrolleri’nde kullanılır.

<%@ Control Language="vb" Codebehind="user1.ascx.vb" Inherits="test4.user1" %>

Yukarıdaki örnek kod parçası user1.ascx dosyasındaki @Control etiketi içerisindeki code-behind dosyası tanımlamasını göstermektedir. user1.ascx.vb code-behind dosyasındaki test4.user1 sınıfını miras alacağı tanımlanıyor.


Kullanıcı Kontrolleri Neden Kullanılır?

ASP.NET sayfalarında Kullanıcı Kontrolleri’nin kullanılması programcıya çeşitli faydalar sağlar. Bir defadan fazla kullanılabilirler. Ayrıca mimari yapısı sayesinde uygulamanın tümünden farklı bir programlama dili (VB.NET,C#) ile yazılabilir.

Kullanıcı Kontrolleri sayfa başlığı, bir formun bölümü gibi bir çok amaçla kullanılır. Kullanıcı Kontrolleri kullanıcı arabiriminin tekrar kullanılabilmesi gereken durumlarda tercih edilir.

Kullanıcı Kontrolleri bazı özellikleri:
• Kullanıcı kontrollerinde kullanılan değişkenler ile kullanıcı kontrolünü barındıran sayfanın değişkenleri birbirine karışmaz. Kullanıcı kontrolleri birer sınıftır ve tanımlanan değişkenler bu sınıfın birer üyesidir.
• Bir Web Form sayfası içerisinde aynı kullanıcı kontrolü birden çok kez kullanılabilirler. Ve bu durum herhangi bir karışıklığa sebep olmaz.
• Kullanıcı kontrolünü barındıran sayfanın kullandığı programlama dilinden farklı bir programlama dili kullanabilir.

Bir Kullanıcı Kontrolü tüm web uygulaması tarafından kullanılabilir. Ancak başka bir web uygulamasındaki bir Web Form tarafından kullanılamaz. Kontrollerinizi birden fazla web uygulamlası arasında paylaşabilmek için tavsiye edilen yol Web Kontrol Kütüphane’ lerini kullanmaktır. Fakat Web Kontrol Kütüphane’ leri geliştirme süreci daha uğraştırıcı olabilir. Çünkü Web Kontrol Kütüphane’ leri geliştirmek için görsel araçlar yoktur, yapılacak her şey kod yazılarak yapılır.
 

Visual Studio .NET ile bir Kullanıcı Kontrolü oluşturmak :

1. Solution Explorer penceresi içerisinden Web Uygulama Projesini seçip üzerine sağ tıklayın, Add menü seçeneğinin alt seçeneklerinden Add Web User Control seçeneğini seçiniz.
2. Kullanıcı Kontrolü’ ne istediğiniz bir ismi verip Open düğmesine tıklayın. .ascx uzantılı bir dosya oluşturulmuş olmalı.
3. Kullanıcı Arabirimi öğelerini ekleyin, bu işlem Web Form’ larında yapılan ile aynıdır. Toolbox penceresinden istediğiniz öğeyi sürükleyip Kullanıcı Kontrolü üzerine bırakabilirsiniz veya HTML bölümünden kendiniz yazarak ekleyebilirsiniz.
4. Aynı Web From sayfalarında olduğu gibi code-behind dosyasında istediğiniz olay prosedürlerini kodlayınız.
5. Kullanıcı Kontrolü’ nü barındıracak Web Form sayfalarının bilgi erişimi için erişilebilir seviyede (Public veya Friend) özellikler (property) tanımlayınız.

Kullanıcı Kontrolleri Web Form’ları ile aynı temeller üzerinde çalıştığı için var olan bir Web Form sayfasını Kullanıcı Kontrolü’ ne çevirmek kolayca yapılacabileceği bir işlemdir.

Var olan bir sayfayı Kullanıcı Kontrolü’ ne çevirmek :
1. Sayfadaki tüm <HTML>,<HEAD>,<BODY> etiketlerini kaldırın.
2. @Page etiketini @Control etiketi ile değiştirin. Bir çok @Page etiketi özelliği @Control etiketi ile çalışmaktadır.
3. Sayfanın uzantısını.ascx olarak değiştirin.
 

Kullanıcı kontrollerini barındıran sayfalar kullanıcı kontrollerinin üzerindeki sunucu kontrollerine direkt erişemezler. Visual Studio .NET sayfaya eklenen kontrolleri sayfada tanımlarken Protected erişim belirleyicisini kullandığı için dışarıdan erişim yapılamaz, ancak Visual Studio .NET’ in tanımlamasını Public olarak değiştirmeniz durumunda dışarıdan erişim sağlanır. Yada tavsiye edilen ve daha uygun olan bir yöntem ile istenilen bilgiler için dışarıdan erişime sahip (Friend veya Public) Property’ ler tanımlayarak Kullanıcı Kontrolü’ nün taşıyıcısı ile bilgi alış-verişinde bulunmasını sağlamış olursunuz.

Property Tanımlamak

Kullanıcı Kontrolleri ve bulunduğu sayfalar arasındaki veri paylaşımı Kullanıcı Kontrolleri’ nde bulunan kontrollerin Public veya Friend olarak dışarıdan erişime izin verecek şekilde sağlanabilir. Fakat bu şekilde Kullanıcı Kontrolleri’ ndeki sunucu kontrollerinin tüm özellik ve methodlarının açılmasına sebep olur. Bunun yerine gerekli veriler için dışarıdan erişilebilir Property’ ler tanımlamak daha kullanışlı olacaktır. Sadece ilgili özelliklerin erişime açılmasına kapsülleme (encapsulation) denir.

Public Property Telefon() As String
Get
Return txtTelefon.Text
End Get
Set(ByVal Value As String)
txtTelefon.Text = Value
End Set
End Property

Yukarıdaki kod parçasında dışarıdan erişilebilir, Telefon isminde ve String veri türünde bir
Property(Özellik) tanımlanmıştır. Bu kod parçasını barındıran Kullanıcı Kontrolü’nün adres1 ismiyle bir Web Form’ da kullanıldığını varsayarsak, bu özelliğe Web Form içerisinden aşağıdaki şekilde erişilebilir.

Veri ataması :
adres1.Telefon=”1234567”
Verinin okunması :
strTelefon=adres1.Telefon

Public erişim yetkisi özelliği herkes tarafından erişilebilir, Friend erişim yetkisi ise özelliği aynı proje (assembly) içerisinde her yerden erişilebilir olarak nitelendirir.


 


Web Form’larına Kullanıcı Kontrolleri Eklemek

Kullanıcı Kontrolleri aynı uygulama içerisinde bulunan Web Form’larına eklenebilir.
Kullanıcı Kontrollerini kullanacak olan Web Form’larında önceden bazı bildirimler yapılmalıdır. Kullanıcı Kontrolü Web Form’ una önceden tanıtılmalıdır. Bunun için @Register etiketi kullanılır.
@Register etiketi için örnek bir söz dizimi aşağıdadır.

<%@ Register TagPrefix="formlar" TagName="adresformu" Src="adres.ascx" %>

TagPrefix özelliği Kullanıcı Kontrolleri için bir aduzayı (namespace) belirler. Böylece aynı isme sahip Kullanıcı Kontrolleri’ni farklı aduzayları içersinde tutabilirsiniz.
TagName özelliği Kulllanıcı Kontrolü’ için isim belirler.
Src özelliği Kullanıcı Kontrolü dosyasının (.ascx) yolunu belirler.

Sayfaya yukarıdaki şekilde tanıtılan Kullanıcı Kontrolü aşağıdaki şekilde sayfamıza ekleyebiliriz.

<formlar:adresformu id="Adres1" runat="server"></formlar:adresformu>
<formlar:adresformu id="Adres2" runat="server"></formlar:adresformu>


Sayfamıza aynı Kullanıcı Kontrolü’ nden iki tane eklenmiştir.

Kullanıcı Kontrolleri’ nin dışarıdan erişilebilir özelliklerine code-behind dosyasından programatik olarak veri atama yapılabileceği gibi gibi .aspx dosyasında kontrol tanımlanırken de veri ataması yapılabilir.

Aşağıda Adres1 olarak tanımlanan Kullanıcı kontrolünün Telefon özelliğine veri ataması yapılıyor.

<formlar:adresformu id="Adres1" runat="server" Telefon="1234"></formlar:adresformu>
 



LoadControl Methodu

Kullanıcı Kontrolleri Web Form’larına yukarıda anlatıldığı gibi açıkça yazılarak eklenebilir. Bazı durumlarda Web Form’ una eklenecek olan Kullanıcı Kontrolünün çalışma zamanında belirlenmesi zorunlu olabilir. Sayfaya gelen parametreler doğrultusunda farklı Kullanıcı Kontrolleri’ i sayfaya eklenmek istenebilir.

Dim myAdres As adres = LoadControl("adres.ascx")
myAdres.Telefon = "1234567"
myAdres.etiket = "Adres Bilgileriniz :"
Me.PlaceHolder1.Controls.Add(myAdres)

Yukarıdaki kod parçasında adres.ascx Kullanıcı Kontrolü LoadControl metodu ile yükleniyor ve adres tipindeki myAdres değişkeni ile gösteriliyor. Telefon özelliğine bir değer atanıp sayfamızda bulunan PlaceHolder1 ismindeki PlaceHolder kontrolünün Controls koleksiyonuna ekleniyor. Böylece sayfamıza eklenmiş oluyor.

Kullanıcı kontrolleri ile ilgili hemen hemen tüm ayrıntılardan bahsetmeye çalıştım umarım faydalı olur.

Cengiz HAN
Microsoft ASP.NET MVP
cengiz@cengizhan.com