43 C# Görsel Programlama 43 KeyPress Kullanımı

Merhabalar.Çok uzun bir aradan sonra güzel bir konu anlatımıyla beraberiz yine. 

Şimdi sizlere Textbox gibi içerisine anlık değer yazabildiğimiz nesnelerin olaylarından biri olan KeyPress i anlatmaya çalışacağım. 

Bu olayı anlatırken de diğer bir hedefimiz Textbox'a sadece istenilen karakterlerin girişine izin vermeyi göstermek olacak.

Nedir bu KeyPress? diye aklından geçiren arkadaşıma hemen söyleyeyim ne olduğunu.

KeyPress Textbox'a tam giriş yapıldığı anda tetiklenen çalışmaya başlayan bir event(olaydır). 

Her zaman ki gibi küçük bir örnek ile olaya girişelim. 

Mesela bir kullanıcı adı ve şifresi ile giriş yapılan bir sistemimiz olduğunu ve bunu programını yazdığımızı varsayalım. Ama programın olayı şu kullanıcı adı sayısal ve diğer özel karakterleri almıyor, şifrede sadece sayılardan oluşuyor. 

Bir programcı olarak en büyük hedeflerimizden birinin kullanıcıya kullanışlı bir arayüz sunmak olduğunu düşünürsek kullanıcı adı girilecek Textbox'a sayı ve özel karakter girişini engellemeli şifre kısmına da sadece sayısal ifade girilebilecek şekilde dizayn etmemiz kullanıcıya çok iyi bir şekilde yol gösterecektir.


Şimdi bunları nasıl yapacağız bunlara bakalım.

Öncelikle anlık girişin kontrolünü giriş işlemini yazdırmadan kontrol etmemiz gerektiği için Textbox'ın KeyPress özelliğini kullanacağız.

Formumuzuda bir görelim üzerinden devam edelim.


Textboxların KeyPress olaylarına erişelim.


Olaya çift tıklayıp kod kısmına geçelim.

Şimdi öncelikle sayı girişi yada metin girişi nasıl engellenir buna bakalım.

Bizim tüm karakterlerimizin ASCII kodu dediğimiz sayısal karşılıkları vardır. Öncelikle basılan tuşun ASCII karakterini bulalım. 

Biz biliyoruz ki 0'ın ASCII karakterlerinde değeri 49   9 un ise 57 diğer rakamlarımız bu iki değer arasındaki sayıları sırası ile alırlar. 

Öyleyse sadece sayı girilmesini istiyorsak basılan tuştan aldığımız ASCII bilgisi 49 ve 57 değerleri dahil arasında bir değerse yazılmasına izin verecek değil ise de engelleyeceğiz. 

Şimdi bunlara bakalım.

İlk olarak basılan değerin ASCIIdeğeri nasıl alınır bunu görelim.

int basilantus = Convert.ToInt32(e.KeyChar); 


Stringden çevirme yapmadığımız için dönüşüm için int.parse kullanamayız.

Evet karakterimizi aldık şimdi bir şart ile olayı kontrol edelim.


Şart içindeki en baştaki ! işareti tüm olayın olumsuzunu almayı ifade eder.

Kodlara baktığımızda ASCII değeri 8 olarak da dönerse bu işlemi yapmasını söylüyoruz.

Peki bunu neden yapıyoruz?

Bunu şundan yapıyoruz. ASCII karakteri 8 in klavyedeki karşılığı Backspace yani silme tuşudur. Eğer bunun kullanılmasına izin vermez isek yanlış yazdığımız sayısal değeri silmeye olanak vermemiş oluruz.

e.Handled ise olayın yapılıp yapılmamasına izin verilip verilememesi olayıdır. True değerini aldığını yapılmamasını false olduğunda ise yapılmasını ifade eder.

Buradaki kodlara bakarsak gelen değer sayısal yada backspace değil ise e.handled=true;  yapılmış yani yazma engellenmiş.

Aynı şeyleri bir de sadece metin ifadesi girişi için yaptığımız zaman programımız istediğimiz gibi hazır demektir.


Ve programımız hazır. 


Böylelikle bu konu anlatımının da sonuna geldik: Umarım faydalı olmuştur.

Çalışan arkadaşlarıma kolaylıklar dilerim.

Murat Bilginer












Yorumlar