2013-03-08 24 views
7

windows form numaralı telefondan richtextbox kullanıcısıyım, ancak kullanıcı bir tuşa basılı tutarsa ​​yalnızca 1 karakter alırlar.Anahtar başına sadece 1 değere izin ver

örn. onlar o zaman kadar sadece istediğim tek giriş A ve değil AAAAAAAAAAAAAAAAAAAAAAAAAAAAA anahtar anahtarıdır aşağı sefere kadar olan andan itibaren vb

olacak hold down A işleminden 1 değerine çevirmek için.

Bunu başarmak nasıl herhangi bir fikir?

ben KeyDown ve KeyUp kullanmak gerekir ama bunun geçmiş emin değilim.

cevap

1

Sen TextBox alt sınıf ve OnKeyDown ve OnKeyUp yöntemlerini geçersiz olabilir. KeyDown sonra herhangi KeyUps olmasaydı, sadece true için KeyEventArgs.SuppresKeyPress ayarlayarak bunu görmezden. SuppresKeyPress önemli olduğuna dikkat,

public class MyTextBox:TextBox 
{ 
    bool down = false; 
    protected override void OnKeyDown(KeyEventArgs e) 
    { 
     if (!down) 
      base.OnKeyDown(e); 
     else 
      e.SuppressKeyPress = true; 
     down = true; 
    } 
    protected override void OnKeyUp(KeyEventArgs e) 
    { 
     base.OnKeyUp(e); 
     down = false; 
    } 
} 

Alternatif böyle KeyUp ve KeyDown olay işleyicileri kullanabilirsiniz:: Kodu kontrol

bool down = false; 
private void textBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
     if (down) 
      e.SuppressKeyPress = true; 
     down = true; 
} 

private void textBox1_KeyUp(object sender, KeyEventArgs e) 
{ 
     down = false; 
} 
+0

İlk çözüm mükemmel çalışıyor); – user476683

+0

Aslında, her ikisi de işe yarıyor! – user476683

7

Sen KeyDown ve KeyUp olaylar hakkında doğru. Bunu böyle yapabilirsin.

bool keyDown = false; 
bool keyPress = false; 

private void richTextBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    e.Handled = keyDown; 
    keyDown = true; 
} 

private void richTextBox1_KeyUp(object sender, KeyEventArgs e) 
{ 
    keyDown = keyPress = false; 
} 

private void richTextBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    e.Handled = keyPress; 
    keyPress = true; 
} 
+1

Bu, hangi büyük silme ve backspace için çalışan, ama A, B, C gibi anahtarlar için çalışmıyor mu? – user476683

+0

user476683 @ Ben şimdi çalışmalı, bunu biraz modifiye ettim! Teşekkürler. – VladL

İlgili konular