每按一次键只允许1个值

use*_*683 7 .net c# richtextbox winforms

我有richtextbox一个windows form用户可以输入文本,但它需要建立这样,如果用户按下一个关键,他们只拿到1个字符.

例如,如果他们hold down A那么它只会输入A而不是AAAAAAAAAAAAAAAAAAAAAAAAAAAAA等等.

从按键关闭到按键启动的那一刻起,我只想将其转换为1值.

我有什么想法可以达到这个目的吗?

我想我需要使用KeyDown,KeyUp但我不确定过去.

Vla*_*adL 7

你说得对有关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;
}
Run Code Online (Sandbox Code Playgroud)


Nik*_*vic 1

您可以子类化并TextBox重写方法。如果没有任何after ,只需通过设置为 来忽略它。检查代码:OnKeyDownOnKeyUpKeyUpsKeyDownKeyEventArgs.SuppresKeyPresstrue

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用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;
}
Run Code Online (Sandbox Code Playgroud)