每按一次键只允许1个值

时间:2013-03-08 09:24:57

标签: c# .net winforms richtextbox

我在richtextbox上有一个windows form,用户可以输入文字,但需要进行设置,这样如果用户按住某个键,则只能获得1个字符。

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

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

我是如何实现这一目标的?

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

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

您可以继承TextBox并覆盖OnKeyDownOnKeyUp方法。如果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;
    }
}

或者,您可以使用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;
}