Makale Özeti

Bu makalede VB .NET kullanılarak kullanıcı kontrollerinin nasıl tasarlanabileceği örneklenmektedir.

Makale

VB .Net te User Control Tasarımı

.Net te tüm kontrol ler; görsel arayüze sahip birer sınıf olarak tasarlanırlar. Bu sınıf lar "Control" sınıfını taban sınıf alarak türetilirler. Control sınıfında; herhangi bir kontrol de olması gerekli, tüm ortak özellik ve işlevler tanımlanmıştır. Control sınıfından türetilen sınıflar bu özellik ve işlevleri miras alırlar.

Kontrol Kaynakları

1 ) .Net framework ile hazır gelen kontrol ler. (Built - In Controls)

2 ) COM döneminden aktarılan, kalıt ActiweX kontroller.

3 ) .Net için kontrol yada bileşen tasarlayan, yazılım firmaları tarafından geliştirilen "üçüncü parti" kontroller.

4 ) Programcılar tarafından ve belirli amaçlar için geliştirilen kontrol ler. (User yada Custom kontrol ler)

User Kontrol Tasarım Teknikleri 

      VB .Net te user control tasarımı için üç farklı teknik söz konusudur:

  • Türetme Tekniği : Önceden var olan bir kontrol den türetme yapılarak yeni işlev ve özelliklere sahip özgün kontrollerin elde edilmesi.
  • Compozit / Bileşik Kontrol Tasarımı : Önceden var olan birden fazla kontrolü birarada kullanarak yeni kontrollerin elde edilmesi.
  • Control Sınıfından Türetme Tekniği : Önceden var olmayan, tamamı ile yeni bir kontrolün yaratılması.

Türetme Tekniğini Kullanarak User Control Yaratılması

Önceden var olan bir kontrol den, türetme ile yeni bir kontrol yaratmanın nedeni; hiç şüphesiz ki, söz konusu kontrole yeni işlev ve özellikler kazandırmaktır. Örneğin .Net framework ile hazır gelen TextBox kontrolü; klavye den basılan printable tüm karakterleri kabul etmektedir. Sadece nümerik karakterleri kabul etmesini istediğimiz bir TextBox kontrolüne ihtiyaç duyduğumuzda, böyle bir kontrolü standart TextBox kontrolünden türeterek basitçe elde edebiliriz. 

Türetme yolu ile, yeni kontrol yaratmanın en önemli getirisi; taban sınıfta tanımlanmış işlev ve özellikleri miras alarak, bu üyeleri tekrar tekrar, kod lamaktan kurtulmaktır. Örneğin yukarıdaki gibi bir TextBox kontrolünü, standart TextBox kontrolünden türetmeksizin yaratmak isteseydik, en azından kontrolün ekrana boyanması, klavye den girdilerin alınması gibi bir takım aşağı seviyeli işlemleri yeniden kodlamak zorunda kalırdık. 

Örnek : Sadece sayısal karakterleri kabul eden bir TextBox kontrolünün tasarımı ;   

Bu örneği gerçekleştirebilmek için VB .Net te türü "Windows Control Library" olan yeni bir proje başlatalım. Örneğin tutarlı olması açısından proje ismi olarak "SayisalTextBox" kullanmanızı tavsiye ederim !

Proje başlatıldıktan sonra çıkan design ekranında F7 ile kod penceresine geçin. Burada sınıf ismi olarak UserControl1 yazdığını göreceksiniz. Lütfen bu sınıf ismini "SayisalTextBox" olarak değiştirin. Bu satırın hemen altında yer alan "Inherits System.Windows.Forms.UserControl" satırını ise "Inherits System.Windows.Forms.TextBox" şeklinde değiştirin. Bu değişiklik sayesinde standart TextBox kontrolünü taban sınıf olarak kullanan türemiş bir sınıf implemente edebiliriz. Sınıfın implementasyon kodları aşağıdaki gibidir;

Public Class SayisalTextBox

Inherits System.Windows.Forms.TextBox

Private Sub SayisalTextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress

Select Case Asc(e.KeyChar)

Case 48 To 57, 8, 13

e.Handled = False

Sayısal tuşlar, backspace ve enter tuşları haricinde diğer tuşlar kabul edilmez

Case Else

e.Handled = True

End Select

End Sub

End Class

Yazdığımız bu özel TextBox kontrolünü kullanabileceğimiz (deneyebileceğimiz) yeni bir Windows Application projesi başlatalım. Bu proje test platformumuz olacak. Test platformunda, yazdığımız kontrolü deneyebilmemiz için öncelikle söz konusu kontrolü ToolBox a eklememiz gerekir. Bunun için ToolBox penceresinde sağ tıklayın ve açılan menüden "Customize ToolBox" seçin. Açılan diyalog penceresinde ".Net Framework Components" tab ına geçin. Browse tuşu ile "SayisalTextBox.dll" dosyasını bularak ekleyin.

Customize Toolbox

Bu pencereyi OK ile kapattıktan sonra, ToolBox General tab ında "SayisalTextBox" kontrolünün eklendiğini göreceksiniz. Bu kontrol den bir tane form üzerine ekleyip çalıştırdığınızda, TextBox a sadece sayısal karakterleri girebildiğinizi göreceksiniz.

Compozit Kontrol Tasarımı

Yazılım geliştirmede, yukarıda anlatıldığı gibi, sadece türetme yolu ile elde edilen kontroller işlev açısından, çoğu zaman yeterli olmayabilir. Bu sebeble önceden var olan birden fazla kontrolü bir arada kullanarak, gelişmiş yeteneklere sahip yeni kontrol tasarımları yapılmaktadır.

Örneğin yukarıda yarattığımız kontrolü ele alırsak; kontrol, kullanıcının sayısal olmayan bir karakter girmesi halinde, kullanıcıyı uyarmaya yönelik bir mesaj vermemektedir. Böyle bir işlevi yarattığımız kontrole ekleyebilmek için TextBox sınıfından türetme yapmanın yanı sıra başka bir built - in kontrol den daha faydalanmamız gerekir.

Örnek : Sadece sayısal karakterleri kabul eden ve kullanıcının sayısal karakter girmemesi halinde error verebilen bir TextBox kontrolünün tasarımı ;

Bu örneği gerçekleştirebilmek için önceden yazıp derlediğiniz "SayisalTextBox" projesini açın ve design penceresine bu kez ToolBox tan bir adet "ErrorProvider" kontrolü yerleştirin. Daha sonra kod penceresine geçerek aşağıdaki mavi renkle yazılmış kod satırlarını ekleyin.

Public Class SayisalTextBox

Inherits System.Windows.Forms.TextBox

Private Sub SayisalTextBox_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles MyBase.KeyPress

Select Case Asc(e.KeyChar)

Case 48 To 57, 8, 13

ErrorProvider1.Dispose()

e.Handled = False

Case Else

ErrorProvider1.SetError(Me, "Sadece sayısal karakter giriniz")

e.Handled = True

End Select

End Sub

End Class

Bu eklentileri yaptıktan sonra, projenizi tekrar derleyip çıkabilirsiniz. Bundan sonraki aşama olarak, test platformu şeklinde tasarladığınız projeyi açın ve tekrar derleyip çalıştırın. Deneme amaçlı olarak sayısal olmayan bir karakter girdiğinizde; basılan karakterin tasarladığımız kontrol tarafından kabul edilmemesinin yanı sıra kontrolün sağ tarafında kırmızı ve içerisinde çarpı işareti bulunan bir resim çıktığını göreceksiniz. Bu resim üzerine fare ile geldiğinizde, "Sadece sayısal karakter giriniz" mesajı tooltip olarak görüntülenecektir. Örneğin aşağıdaki resimde kullanıcı "12" den sonra bir sayısal olmayan karaktere basmış ve görsel olarak hata mesajı almıştır.

Ekran görüntüsü


Aykut TAŞDELEN
MVP Most Valuable Professional

aykuttasdelen@yazgelistir.com