-4

我正在使用文本框,这是我的问题...

我已经有一个处理程序,当达到定义的最大文本长度时,程序将不再允许输入。这是代码:

private void txtText_KeyPress(object sender, KeyPressEventArgs e)
{
    if (txtText.Text.Length > MaxLengthAllowed - 1 && e.KeyChar != 8)
    {
        e.Handled = true;
        Console.Beep(2000, 90);
        return;
    }
}

现在我的问题是当我按住一个键(例如字母 A)时,它超过了“MaxLengthAllowed”然后发出哔哔声。

这是错误还是文本框的限制?还是我错过了什么?

当您不持有钥匙时,此代码可以正常工作。因此,这是我的问题。

4

3 回答 3

1

只需设置文本框的 MaxLength 属性。这很简单

textboxVar.MaxLength = maxLengthAllowed;

希望有帮助。

您始终可以订阅 PropertyChanged 事件,您可以在文本框的 Text 属性更改时触发该事件。阅读如何在财产变更上引发事件

于 2013-07-24T09:02:26.773 回答
0

您可以改用 KeyUp 事件。当您释放密钥时,它只会触发一次。只要您按住键,KeyPress 就会被触发多次。

于 2013-07-24T09:10:52.553 回答
0

被触发TextBox.Text时不更新。TextBox.KeyPress例如,如果TextbeforeKeyPressA,当用户键入B时,事件处理程序Text中仍然是A(不是AB) 。KeyPress因此,您必须将您定义MaxLengthAllowed为比所需值小 1。代码应如下所示:

private void txtText_KeyPress(object sender, KeyPressEventArgs e)
{
  if ((txtText.Text.Length > MaxLengthAllowed - 1) && e.KeyChar != 8)
  {
    e.Handled = true;
    Console.Beep(2000, 90);      
  }
}

我认为您应该改用TextBox.MaxLength属性,它还支持Beep,甚至比生成的Beep sound更好。BeepConsole.Beep()

于 2013-07-24T09:11:59.090 回答