每次按键只允许1个值
本文关键字:1个值 | 更新日期: 2023-09-27 18:02:48
我在windows form
上有一个richtextbox
,用户可以输入文本,但它需要设置,以便如果用户按住一个键,他们只能得到1个字符。
。如果输入hold down A
,则只输入A而不输入AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
等。
从键按下到键按上我只想把它转换成1个值
我该怎么做呢?
我想我需要使用KeyDown
和KeyUp
,但我不确定过去。
您对KeyDown
和KeyUp
事件的看法是正确的。你可以这样做。
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;
}
您可以子类化TextBox
并覆盖OnKeyDown
和OnKeyUp
方法。如果KeyDown
之后没有KeyUps
,则忽略它,将KeyEventArgs.SuppresKeyPress
设置为true
。检查代码:
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;
}
}
或者您可以像这样使用KeyUp
和KeyDown
事件处理程序,注意SuppresKeyPress
是至关重要的:
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;
}