【问题标题】:Allow only 1 value per key press每次按键仅允许 1 个值
【发布时间】:2013-03-08 09:24:56
【问题描述】:

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

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

从按键按下的那一刻到按键升起的那一刻,我只想将其转换为 1 个值。

有什么想法可以实现吗?

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

【问题讨论】:

    标签: c# .net winforms richtextbox


    【解决方案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;
    }
    

    【讨论】:

    • 这适用于删除和退格,这很棒,但它不适用于 A、B、C 等键?
    【解决方案2】:

    您可以继承 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;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多