每次按键只允许1个值

本文关键字:1个值 | 更新日期: 2023-09-27 18:02:48

我在windows form上有一个richtextbox,用户可以输入文本,但它需要设置,以便如果用户按住一个键,他们只能得到1个字符。

。如果输入hold down A,则只输入A而不输入AAAAAAAAAAAAAAAAAAAAAAAAAAAAA等。

从键按下到键按上我只想把它转换成1个值

我该怎么做呢?

我想我需要使用KeyDownKeyUp,但我不确定过去。

每次按键只允许1个值

您对KeyDownKeyUp事件的看法是正确的。你可以这样做。

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并覆盖OnKeyDownOnKeyUp方法。如果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;
    }
}

或者您可以像这样使用KeyUpKeyDown事件处理程序,注意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;
}