C# - TextBox'a Girilen Her 4 Karakterden Sonra Bir Boşluk Bırakma

EKAya03

Hectopat
Katılım
7 Aralık 2014
Mesajlar
31
Daha fazla  
Cinsiyet
Erkek
Öncelikle herkese merhaba, başlıktan da anlaşılacağı gibi ben textBox'a girilen her 4 karakterden sonra bir boşluk bırakan programı yazmak istiyorum. Nasıl yapılacağını bilenler kodlarını paylaşırsa çok sevinirim. Şimdiden çok teşekkürler :)
 
Yapmak istediğiniz şey pek yapılması kolay bir şey değil. Textbox'a girilen değeri değiştirirseniz kullanan kişi karmaşa yaşayabilir. Bu işlemi yapmak için bir sürü kriteri göz önünde bulundurmalısınız. Örneğin delete ve backspace tuşları istediğiniz sistemi bozabilir ve ya kullanıcının Textbox imlecini değiştirmesi sorun yaratabilir. Yazıyı kesip yapıştırmak da ayrı bir sorun. Çünkü sadece KeyPressed olayını ele alsanız bu tip durumları es geçmiş oluyorsunuz. TextChanged gibi bir kaç olay için kod yazmanız gerekebilir.

Bence boşluk bırakmak yerine 4 haneli bir kaç TextBox kullanıp birinde yazı bitince diğerine otomatik geçiş yapması daha mantıklı gibi. İnternette Kredi Kartı doldurulan textbox'lar bu mantıkla çalışıyor. Bu işlemin mantığı basit textbox ile ilgili bir değişikliğe gitmeden sadece bir textbox dolmuşsa otomatik olarak sağındakine geçiyorsunuz. Textbox boşken backspace tuşu soldaki Textbox'a geçer. Bu işlemi yapmak basit. Ama diğerinde bir çok kriteri göz önünde bulundurmanız gerekiyor.

Gene de bu yöntemi uygulamak istiyorsanız biraz yardımcı olabilirim.
 
Son düzenleme:
Öncelikle böyle bir açıklama yaptığınız için çok teşekkür ederim, söylediğiniz şeyleri düşününce çok haklı olduğunuz aşikar. Ama ben yine de bunun nasıl yapılacağını öğrenmek istiyorum, kullanmayacak olsam bile en azından artık bilgi sahibi olurum.
 
Sizin için örnek hazırladım. Örnekte TextBox sınıfından türeyen yeni bir TextBox sınıfı oluşturuyoruz. Bu yeni kontrol sınıfları Custom Control olarak geçiyor. Bu sınıfa 4 karakter sonrasında boşluk bırakan özelliği ekliyoruz. Benim hazırladığım örnekte sadece en son kelime 4 harften oluşuyorsa sonuna boşluk ekliyor. Bir şeyler yazdınız diyelim sonra yazının ortasına gelip tekrar bir şeyler yazarsanız 4 karakterden fazla karakter oluşabilir. Böyle olmasın istemiyorsanız farklı yöntemler geliştirmek gerekir. Ayrıca kes kopyala yapıştır yaparak da 4'ten fazla karakter oluşturabilmeniz mümkün. Gene aynı şekilde bu işlem için de yeni kod yazmak gerekiyor.

Oluşturduğumuz Custom TextBox kodu:

Kod:
    public class CustomTextBox : TextBox
    {
        //Space tuşunu devre dışı bıraktım. Devre dışı bırakmadan da çözüm üretilebilir.
        protected override void OnPreviewKeyDown(KeyEventArgs e)
        {
            base.OnPreviewKeyDown(e);

            if (e.Key == Key.Space)
            {
                e.Handled = true;
            }
        }

        //5. karakteri girerken boşluk bırakılsın istiyorsanız.
        protected override void OnPreviewTextInput(TextCompositionEventArgs e)
        {
            int length = this.Text.Split(' ').Last().Length;

            if (length == 4)
            {
                this.AppendText(" ");
                this.Select(this.Text.Length, 0);
            }
            base.OnTextInput(e);
        }

        //4. karakter girdikten sonra direk boşluk bırakılsın istiyorsanız.
        //protected override void OnPreviewTextInput(TextCompositionEventArgs e)
        //{
        //    int length = this.Text.Split(' ').Last().Length;

        //    if (length == 4)
        //    {
        //        this.AppendText(" ");
        //        this.Select(this.Text.Length, 0);
        //        base.OnTextInput(e);
        //    }
        //    else
        //    {
        //        base.OnTextInput(e);
        //        length = this.Text.Split(' ').Last().Length;
        //        if (length == 4)
        //        {
        //            this.AppendText(" ");
        //            this.Select(this.Text.Length, 0);
        //        }
        //    }

        //}
    }

Kodun tamamına burdan erişebilirsiniz.
 
Hocam kodları girmeyi denedim ama; if (e.Key == Key.Space) şu kısımda e'den sonra Key çıkmıyor, KeyCode çıkıyor mesela. Birde bir şeyi belirtmekte fayda var, (en başta belirtmediğim için bağışlayın) ben bu uygulamayı WFA'da yapmak istiyorum siz bana WPF'de uygulayıp vermişsiniz bu kodları anladığım kadarıyla. Acaba bu yüzden kodları yazarken böyle bir sorunla karşılaştım?
 
Winforms ile WPF farklı. Biraz uğraşarak Winforms için de aynı sonucu alabilirsiniz. WPF'de KeyEventArgs varken Winforms'ta PreviewKeyDownEventArgs. OnPreviewTextInput olayı Winforms textbox bileşeninde yok. Bu olay yoksa çözüm biraz zorlaşır. Textchanged olayını ele alıp işlem yapmalısınız. Ancak space eklerken de TextChanged olayı tetiklenecek. Winforms için bu komutları deneyin. Backspace yapınca textchanged olayı tetiklendiği için space karakterini silince otomatik olarak space ekliyor. Winforms ile ilgili fazla uğraşmak istemiyorum verebileceğim bilgi bu kadar. WPF ile ilgili yardım almak istiyorsanız yardımcı olabilirim.

Kod:
    class CustomTextBox : TextBox
    {
        protected override void OnPreviewKeyDown(PreviewKeyDownEventArgs e)
        {

            if (e.KeyCode == Keys.Space)
            {

            }
            else
            {
                base.OnPreviewKeyDown(e);
            }
        }

        protected override void OnTextChanged(EventArgs e)
        {
            int length = this.Text.Split(' ').Last().Length;

            if (length == 4)
            {
                this.AppendText(" ");
                this.Select(this.Text.Length, 0);
            }
            base.OnTextChanged(e);
        }

    }
 
Verdiğiniz bilgilerin bendeki değerini tahmin bile edemezsiniz hocam. Üşenmeyip uğraştınız çok teşekkürler, himmetiniz var olsun :)
 
Uyarı! Bu konu 9 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Yeni konular

Geri
Yukarı