Makale Özeti

Yaptığımız uygulamalardaki kontrollerin özellikleri bazen bizim için yeterli olmayabilir. Bu gibi durumlarda çözümlerden biri mevcut kontrollere ek özellikler eklemektir. Bu makale mevcut kontrollere ek özellik anlatımını incelemektedir.

Makale

Merhaba,

Yaptığımız uygulamalardaki kontrollerin özellikleri bazen bizim için yeterli olmayabilir. Bu gibi durumlarda en iyi çözüm o kontrolden türetilmiş bir component yazmak ve özelleştirmek. Örneğin :

public class MyTextBox : TextBox

}

Fakat çalışır bir durumdaki proje üzerine çalışmalar yaparken kendi kontrolümüzü yapıp, uygulamadaki tüm kontrolleri silip yeniden eklememiz mümkün değildir. Mevcut kontrollere ek özellik eklemek bize daha çok zaman kazandıracaktır. Mevcut kontrollere ek özellik eklemek için IExtender arayüzünden yararlanırız. Bu arayüz sayesinde uygulama üzerinde çalıştığımız kontrollere ek özellikler ekleyebiliriz. Ek özellikten kastım ToolTip kontrolündeki gibidir. Yani ToolTip kontrolü eklediğiniz zaman nasıl bir TextBox kontrolüne ToolTip özelliği ekleniyorsa sizde kendi ek özelliklerinizi ekleyebilirsiniz.  Şöyle bir senaryo uyduralım. Bu componenti kullanan TextBox kontrollerine ek bir yardım mesajı özelliği ekleyelim o mesajı kullanıcıya gösterelim.

Controllere ek özellik ekleyebilmek için IExtender arayüzünden yararlanmamız gerektiğini söylemiştik. Örnek üzerinde inceleyecek olursak;

public class Yardimci : Component, IExtenderProvider

{

}

IExtender arayüzünün implement etmemiz gereken bir metodu vardır. Bu method bool tipinden veri dönüşü yapar ve kullanılan form üzerinde hangi tip kontrollere ek özellik verileceğiniz belirler.

public bool CanExtend(object extendee)

{

      return (extendee is TextBox);

}    

Yukarıdaki kodda sadece kullanılan form üzerindeki TextBox kontrollerine ek özellik verilmektedir. Eğer tüm kontrollere ek özellik vermek istiyorsanız aşağıdaki gibi kullanabilirsiniz :

public bool CanExtend(object extendee)

{

      return (extendee is System.Windows.Forms.Control);

}

Bu ek özelliklerin gösterileceği bir Property adı olmalı. Bu ad ise Class tanımlaması sırasında eklenecek bir attribute ile yapılmaktadır. Class tanımlamamız başına ProvideProperty attribute’ü ekleyerek control’e eklenecek ek property adını belirtmiş oluyoruz ve sınıfımız aşağıdaki gibi bir görünüm kazanıyor.

[ProvideProperty("YardimMesaji", typeof(Control))]

public class Yardimci : Component, IExtenderProvider

{

public bool CanExtend(object extendee)

{

            return (extendee is TextBox);

}

}

Bu ekleme sonucu kontrollerimize aşağıdaki gibi bir özellik eklenecektir.

YardimMesaji on Textbox1 gibi. (ToolTip kontrolünde olduğu gibi)

Yalnız bu property’in çalışabilmesi için 2 metoda ihtiyacımız olacak. Bunlar GetYardimMesaji ve SetYardimMesaji isimlerini taşıyacak. Başka bir değişle Get<PropertyAdı> ve Set<PropertyAdı> şeklinde 2 method oluşturuyoruz. GetYardimMesaji metodu Control tipinden bir parametre almalı. SetYardimMesaji metodu ise 2 parametre alacak. Bunlardan biri Control diğeri ise string tipinden olmalı. Bu isimlendirme sabittir. Kullandığınız property adının başına Get ve Set gelecek şekilde metod oluşturmak zorundasınız.  Biz bu sınıfımızda ToolTip entegrasyonu yaparak gidelim. Sınıfımız aşağıdaki gibi şekil almaktadır.

[ProvideProperty("YardimMesaji", typeof(TextBox))]

      public class Yardimci : Component, IExtenderProvider

      {

            private ToolTip _toolTip;

            public Yardimci()

            {

                  _toolTip = new ToolTip();

            }

             public bool CanExtend(object extendee)

            {

                  return (extendee is TextBox);

            }    

            public string GetYardimMesaji(Control control)

            {

                  return _toolTip.GetToolTip(control);

            }

            public void SetYardimMesaji(Control control, string baslik)

            {

                  _toolTip.SetToolTip(control, baslik);

            }

      }

ToolTip sınıfını kullanarak ek özellikler ekledik. Sıra geldi bu bileşeni kullanmaya. Artık bu bileşeni derledikten sonra ToolBox’a atıp kullanabiliriz. ToolBox’a eklediğimiz bileşeni sürükle bırak ile formumuza attığımız zaman artık formumuz üzerindeki TextBox kontrollerinde ek bir özellik geldiğini görüyoruz.

Bu özellik sadece TextBox kontrollerinde çıkacaktır. Eğer tüm kontroller çıkmasını istiyorsanız CanExtend metodunu

public bool CanExtend(object extendee)

{

      return (extendee is System.Windows.Forms.Control);

}

Şeklide değiştirmeniz gerekiyor. Yeni özelliğimize değer atıp kontrolünü yapıyoruz.

Bu şekilde ek özellikler ekleyip mevcut kontrollerinizi inherit etmeden değişiklikler yapabilirsiniz. Bir başka makalede görüşmek üzere.

Okan Tekeli

C# MVP , MCT

http://www.okantekeli.com