我在richtextbox
上有一个windows form
,用户可以输入文字,但需要进行设置,这样如果用户按住某个键,则只能获得1个字符。
e.g。如果他们hold down A
那么它只会输入A而不是AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
等。
从按键关闭到按键启动的那一刻起,我只想将其转换为1值。
我是如何实现这一目标的?
我想我需要使用KeyDown
和KeyUp
,但我不确定过去。
答案 0 :(得分:7)
您对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;
}
答案 1 :(得分:1)
您可以继承TextBox
并覆盖OnKeyDown
和OnKeyUp
方法。如果KeyUps
之后没有KeyDown
,请将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;
}