Sizinde bildiğiniz gibi .NET Windows uygulamalarızda rahatlıkla kendi kontrollerinizi oluşturabilirsiniz. Bu makalede standart TextBox’ın çok daha gelişmiş versiyonunu yazmaya çalışacağız.

Öncelikle Visual Studio’nuzda C# ile Windows Forms Class Library projesi başlatın.
Kendi TextBox’ımızı geliştirirken tabiki standart olarak bize sunulan TextBox ‘tan da yararlanacağız. Bu sebeble ilk önce TextBox’ı sürükleyip kendi oluşturacağımız kontrole bırakın. Burada dikkat etmeniz gereken konu oluşturduğumuz TextBox Sadece bir TextBox’tan oluşacak başka herhangi bir kontrol kullanmıyacağız. Bunu için kullanıcı bizim TextBox’ımızı formuna koyduğunda ve köşelerinden tutup boyutunu değiştirmeye çalıştığında MetinKutusu doğal olarak yeniden boyutlanacak fakat MetinKutusu içerisindeki TextBox’a ne olacağına burada biz karar vericez.  En mantıklısı MetinKutusu kontrolu yeniden boyutlandırılırsa içerideki TextBox’ta yeniden boyutlanmalı.
Kontrolümüz aşağıdaki resimdeki gibi olmalı.
usercontrol-metinkutusu-1

usercontrol-metinkutusu-1

Bunun için MetinKutusu içerisindeki TextBox’ımız için aşağıdaki özellikleri değiştirin.
Dock:Fill
Multiline:True
Width:150
Height:20
UserControl (MetinKutusu)
Width:150
Height:20
Artık Kodumuzu yazabiliriz;
namespace MetinKutusu
{
    [ToolboxBitmap(“misc.png”)]
    public partial class MKutu : UserControl
    {
        public MKutu()
        {
            InitializeComponent();
            TurDegisti += new TurDegistiDelege(TipSecince);
        }
        string izin=””;
        GirisTipi Turr = new GirisTipi();
        void TipSecince(object sender, EventArgs e)
        {
        }
        public delegate void TurDegistiDelege(object sender, EventArgs e);
        public event TurDegistiDelege TurDegisti;
        //Tur Property ‘si için özellikler ekranından seçilecek değerler
        public enum GirisTipi
        {
            SadeceMetin,
            SadeceSayi ,
            SadeceBuyukHarf ,
            SadeceKucukHarf,
            SayiVeÖzelKarakterler,
            HarfVeOzelKarakterler,
            SadeceOzelKarakterler ,
            Hepsi
        };
        //Kullanıcı ardarda karakterleri girerek izin verilen karakterleri belirtecek.
        //Örneğin: _?)^   gibi
        [Description(“Girilmesini istediğiniz karakterleri aralarda boşluk bırakmadan giriniz.”)]
        public string IzinVerilenKarakterler
        {
            get { return izin; }
            set { izin = value; }
        }
        //Text Özelliğimiz
        [Description(“Metin Giriniz”)]
        public String Metin
        {
            get { return textBox1.Text; }
            set { textBox1.Text = value; }
        }
        [Description(“İzin Veriline Türü Seçiniz.”)]
        public GirisTipi Tur
        {
            get { return Turr; }
            set
            {
                Turr = value;
                EventArgs e = new EventArgs();
                TurDegisti(this, e);
            }
        }
        [Description(“Metin Kutusuna Birden Fazla Satır Girmek İçin..”)]
        public bool CokSatir
        {
            get { return textBox1.Multiline; }
            set { textBox1.Multiline = value; }
        }
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Tur == GirisTipi.SadeceMetin)
            {
                e.Handled = char.IsLetter(e.KeyChar) ? false : (int)e.KeyChar == 8 ? false : (int)e.KeyChar == 32 ?false : true;
            }
            else if (Tur == GirisTipi.SadeceSayi)
            {
                e.Handled = char.IsDigit(e.KeyChar) ? false : (int)e.KeyChar == 8 ? false : true;
            }
            else if (Tur == GirisTipi.SadeceBuyukHarf)
            {
                e.Handled = (int)e.KeyChar >= 65 && (int)e.KeyChar <= 90 ? false : (int)e.KeyChar == 8 ? false :true;
            }
            else if (Tur == GirisTipi.SadeceKucukHarf)
            {
                e.Handled = (int)e.KeyChar >= 97 && (int)e.KeyChar <= 122 ? false : (int)e.KeyChar == 8 ? false :true;
            }
            else if (Tur == GirisTipi.HarfVeOzelKarakterler)
            {
                e.Handled = char.IsLetter(e.KeyChar) || izin.Contains(e.KeyChar.ToString()) ? false : (int)e.KeyChar == 8 ? false : true;
            }
            else if (Tur == GirisTipi.SayiVeÖzelKarakterler)
            {
                e.Handled = char.IsDigit(e.KeyChar) || izin.Contains(e.KeyChar.ToString()) ? false : (int)e.KeyChar == 8 ? false : true;
            }
            else if (Tur == GirisTipi.SadeceOzelKarakterler)
            {
                e.Handled =izin.Contains(e.KeyChar.ToString()) ? false : (int)e.KeyChar == 8 ? false : true;
            }
        }
    }
}
Çalıştırıp Test Edin. Her amaç için kullanılabilecek TextBox oluşturmuş olduk.Örneğin Tc Kimlik Numarası girilecek bir TextBox ‘a ihtiyacınız varsa Tur özelliğinden SadeceSayi ‘yi seçmeniz yeterli.
MetinKutusu kontrolunu derledikten sonra dll dosyasını Windows Uygulamanıza ToolBox’üzerinde sağ click choose items diyerek ekliyebilirsiniz.