我有一个richtextbox
用户windows form
可以输入文本,但需要进行设置,以便如果用户按住一个键,他们只能得到 1 个字符。
例如,如果他们hold down A
那么它将只输入 A 而不是AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
等。
从钥匙放下的那一刻到钥匙向上的那一刻,我只希望它转换为 1 值。
有什么想法可以实现吗?
我想我需要使用KeyDown
,KeyUp
但我不确定过去。
我有一个richtextbox
用户windows form
可以输入文本,但需要进行设置,以便如果用户按住一个键,他们只能得到 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
方法。如果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;
}