7

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

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

从钥匙放下的那一刻到钥匙向上的那一刻,我只希望它转换为 1 值。

有什么想法可以实现吗?

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

4

2 回答 2

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;
}
于 2013-03-08T09:28:03.487 回答
1

您可以继承TextBox和覆盖OnKeyDownOnKeyUp方法。如果KeyUps后面没有,只需设置为KeyDown忽略它。检查代码:KeyEventArgs.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;
    }
}

或者,您可以像这样使用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;
}
于 2013-03-08T09:42:24.437 回答