Memik Yanık - Kişisel Web Sitesi Ana Sayfa | Hakkımda | Kitap Önerileri | Fotoğraflarım | RSS RSS | İletişim

Form Üzerinde Keydown


Windows Application yapıyorum ve form üzerinde F5 tuşuna basınca form üzerindeki panel'in yenilenmesini istiyorum. Fakat Form üzerinde bu event çalışmıyor. Fakat diğer kontrollere uyguladığımda çalışıyor

Normal şartlarda formların üzerinde Button ve TextBox gibi nesneler olmaktadır. Bu nesnelerin de KeyDown ve KeyPress olayları olduğu için çalışma anında kullanıcı klavyenin bir tuşuna bastığında formun mu yoksa formun üzerindeki ilgili nesnenin mi KeyDown olayını temsil eden metot işletilmelidir? 

Başlangıçta formun KeyDown olayı için metot hazırlansa bile formun üzerinde herhangi bir nesne varsa formla ilgili KeyDown olayı meydana gelmeyip ilgili metot işletilmiyor ve öncelik formun üzerine yerleştirilmiş nesnelerin KeyDown olayına veriliyor. Bu nedenle aşağıda verilen kod formun üzerinde herhangi bir nesne varken işletilmez. 

    private void Form1_KeyDown(object sender, KeyEventArgs e) 
     
       MessageBox.Show("Klavyenin bir tuşuna bastınız"); 
     

Formun üzerine yerleştirilen nesnelerin KeyDown metodu yerine formun KeyDown metodu­nun işletilmesini istiyorsanız formun KeyPreview özelliğini true yapmalısınız. Bu özellik true iken öncelik formun KeyDown olayını temsil eden metoda verilir ve aktif nesnenin KeyDown metodu(hazırlandıysa) formun KeyDown metodunun çalışması sona erdikten sonra işletilir. Bu konuda yanlış anlamaları önlemek için forma 2 TextBox yerleştirip formun ve ilk TextBox’ın KeyDown olaylarını temsil eden metotları aşağıdaki gibi düzenledim. 

    private void Form1_KeyDown(object sender, KeyEventArgs e) 
     
       MessageBox.Show("Klavyenin bir tuşuna bastınız");          
     
    private void textBox1_KeyDown(object sender, KeyEventArgs e) 
     
       MessageBox.Show("TextBox'ın içinde iken bir tuşa bastınız");          
     

Formun KeyPreview özelliği true iken ve imleç ilk TextBox’ın üzerinde iken klavyenin bir tuşuna basılması halinde önce formun, ardından TextBox1’in KeyDown metodu işletilir. İmleç 2. TextBox’ta iken bir tuşa basılması halinde yalnızca formun KeyDown metodu işletilir. Çünkü bu sırada 2. TextBox’ın KeyDown olayı için metot hazırlamamıştım. 

Formun KeyDown olayını temsil eden metot “e” adında ve KeyEventsArgs tipinde bir parametreye sahiptir. Bu parametreden yararlanıp KeyDown olayının meydana geldiği andaki şartlar hakkında bilgi alabilirsiniz. Örneğin klavyenin herhangi bir tuşuna basıla­rak KeyDown olayının meydana getirildiği sırada Ctrl tuşunun basılı durumda olup olmadığını öğrenmek istiyorsanız “e” parametresinin Control özelliğine bakabilirsiniz. 

    private void Form1_KeyDown(object sender, KeyEventArgs e) 
     
       if (e.Control == true && e.KeyCode == Keys.F10)   
         MessageBox.Show("Ctrl+ F10 tuşlarına bastınız");  
     

Benzer şekilde KeyDown olayı meydana geldiği sırada Shift veya Alt tuşunun basılı durumda olup olmadığını “e” parametresinin Shift ve Alt özelliklerine bakarak öğrene­bilirsiniz. Aşağıda verilen kod sayesinde basılan tuşun ASCII kodu öğrenilir. 

    private void Form1_KeyDown(object sender, KeyEventArgs e) 
     
       int kod = e.KeyValue; 
       textBox2.Text = kod.ToString(); 
     }

Forumlardaki Sorular 11.11.2009 23:25:19

1 YORUM


YorumlarYorum Yaz
Ana Sayfa | Hakkımda | Kitap Önerileri | Fotoğraflarım | RSS | İletişim
Memik Yanık 2004-2009 © Tüm Hakları Saklıdır.
Hazırlayan www.semgoksu.com