Merhabalar, C# Sanal Klayve Yapımı – Virtual Keyboard dersim ile C# eğitim setime devam ediyorum. Bu dersi yapmak istedim çünkü windows tablete yazdığım bir uygulamada lazım oldu. Durum böyle olunca dersini de eklemek istedim. Zahmetli gibi görünse de aslında neredeyse hiç zahmetli değil. Tabi işimizi biliyorsak. Şimdi gelin C# Sanal Klayve Yapımı – Virtual Keyboard nasıl oluyormuş görelim.
C# Sanal Klayve Yapımı
Öncelikle belirtmeliyim ki bu basit bir klavyedir. Yani tuş kombinasyonları (CTRL, SHIFT) yer almıyor. Sadece Capslock tuşunun fonksiyonu var. Özel karakterler ayrı tuşlar olarak yer alıyor.
Kafanızda bir klavye yapmak için o kadar butonun click eventi ile uğraşılmaz gibi bir şey düşünüyorsanız bu düşünceyi kafanızda çıkarmanızı tavsiye ediyorum çünkü bu yazıda böyle bir şey yok. Ne kadar basit olduğunu gördüğünüzde şaşırabilirsiniz bile. Capslock tuşunun fonksiyonunu çalıştırmak için gerekli kodlar, herhangi harf butonuna tıklandığında harfi textbox’a yazan kodların toplamından daha uzun. :D
Şimdi görelim nasıl yaptığımzı…
Form tasarımım aşağıdaki gibidir.
Şimdi kodlarımıza geçelim.
Capslock butonunun click eventi…
bool CapsLock = true; private void btn_caps_Click(object sender, EventArgs e) { if (CapsLock) { CapsLock = false; lbl_bilgi.Text = lbl_bilgi.Text.ToLower(); } else { CapsLock = true; lbl_bilgi.Text = lbl_bilgi.Text.ToUpper(); } foreach (Button item in panel1.Controls) { if (CapsLock) item.Text = item.Text.ToUpper(); else item.Text = item.Text.ToLower(); } }
Burada söylemem gereken bir şey var. Yukarıdaki tasarımda, alt kısımdaki tüm butonlar bir panel içerisinde yer alıyor. Böyle yapmaz isek foreach döngüsünde InvalidCastException hatası alırız. Mesela, o panelin içerisine bir label koyarsak şöyle bir hata alırız.
”System.Windows.Forms.Label’ türündeki nesne ‘System.Windows.Forms.Button’ türüne atılamadı.’
Bu sebeple tüm butonları bir panel içerisinde alıyoruz ki foreach döngüsü kullanarka bütün butonların text’lerinde yazan harfleri büyütelim / küçültelim.
Sil butonunun click eventi…
private void btnSil_Click(object sender, EventArgs e) { if (textBox1.Text.Length > 0) { textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1); } }
Buraya kadar bir sorunumuz yok. Buradan sonra bir buton click eventini kopyalıyoruz ve adını btn_Click olarak yazıyoruz. Aşağıdaki gibi…
private void btn_Click(object sender, EventArgs e) { }
Sonrasında panel içine koyduğumzu bütün buttonları seçiyoruz ve Properties (Özellikler) kısmına gelerek event kısmına giriyoruz. Paneldeki bütün butonlar seçili iken Click eventi kısmına geliyoruz ve sağ taraftaki oka tıklayarak yukarıda verdiğimiz eventi seçiyoruz. Yani paneldeki 63 butona tek bir event veiyoruz.
Bu işlemi yaptıktan sonra eventimizi aşağıdaki gibi düzenliyoruz.
private void btn_Click(object sender, EventArgs e) { Button b = (Button)sender; textBox1.Text = textBox1.Text + b.Text; }
Bu eventteki kodların ilk satırını açıklayalım. Burada, ilk satırda gördüğünüz Object sender, kısmından gelen objenin bir buton olduğunu söylüyoruz. Yani click eventi gerçekleştiğinde eventi gerçekleştiren nesne, Object sender kısmına geliyor. Bizde sender ile o objenin bir button olduğunu belirtiyoruz. Ardından textbox1’e harfleri yazıyoruz.
C# Sanal Klayve Yapımı – Virtual Keyboard, yazımda bu kadardı arkadaşlar. Diğer yazılarımızda görüşmek üzere…
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız.
Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz… Bu dersimde Github ‘da yerini almıştır. Linke tıklayarak Github sayfasına gidebilir ve indirebilirsiniz.
Sağlıcakla ve takipte kalın.
Hocam Merhaba,
sade ve güzel anlatım için teşekkürler, bir sorum olacaktı,
bu şekilde bir sanal klavye ile bir login ekranı tasarlamak isteseydik username ve pass textboxlarına giriş yapmayı yine yukarıdaki gibi mi yapacaktık, iyi günler teşekkürler.
Merhaba,
Güzel yorumunuz için teşekkürler.
Evet söylediğiniz gibi. Örnekteki textbox’u yazmak istediğiniz textbox yaparsınız.