C# 文本长度超过允许的最大文本长度

C# 文本长度超过允许的最大文本长度,c#,.net,winforms,C#,.net,Winforms,我正在使用文本框,这是我的问题 我已经有了一个处理程序,当达到定义的最大文本长度时,程序将不再允许输入。代码如下: private void txtText_KeyPress(object sender, KeyPressEventArgs e) { if (txtText.Text.Length > MaxLengthAllowed - 1 && e.KeyChar != 8) { e.Handled = true; Con

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

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

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,它超过了MaxLengthlowed,然后发出嘟嘟声

这是一个错误还是类似于文本框的限制?还是我遗漏了什么


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

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

textboxVar.MaxLength = maxLengthAllowed;
希望有帮助


您始终可以订阅PropertyChanged事件,可以在textbox的文本属性发生更改时触发该事件。了解如何

您可以改用KeyUp事件。只有当你释放钥匙时才会触发一次。只要按住键,按键将被多次触发。

文本框。触发TextBox.KeyPress时,文本不会更新。例如,如果按键前的文本是A,当用户键入B时,该文本在按键事件处理程序中仍然是not AB。因此,必须将MaxLengthlowed定义为比所需值小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属性,它还支持嘟嘟声,嘟嘟声甚至比Console.Beep生成的嘟嘟声更好。

您将其设置为正确的Console.Beep2000,90;?你让它在超过最大值后发出嘟嘟声。@Sriram Sakthivel-是的,我让它在达到最大值后发出嘟嘟声text@James-不,一旦达到允许的最大值,它将发出嘟嘟声。如果您想发出嘟嘟声,请转到TextChanged Event,谢谢您,但我实际上使用的是多行文本框,我无法做到这一点。我只是想让我的问题变得更简单。这是我的原创帖子:@JackFrost在阅读了你的原创帖子后,我可以说你的这个问题表达了完全不同的意思。这就是为什么我写了一篇新文章。因为在这里,我的问题是,当用户持有密钥时,文本长度超过MaxLengthlowed…@JackFrost如果您设置上述属性,它将不会为此感谢您,但正如我已经查看了我的代码,我已经有MaxLengthlowed-1@JackFrost如果是这样,我就无法重现你的问题,这样就不能超过所需的最大长度。我也是这么想的。。。试着在你的最后完成我的代码,然后你就会明白。哈哈哈。虽然有点令人沮丧:@JackFrost我也试过你的代码,不仅仅是逻辑上的。你说当你释放钥匙时只会触发一次,但我的代码几乎可以处理它?例如,MaxLengthlowed=15;现在,如果我像在我的帖子中一样拿着一个键,文本长度超过17,有时只超过19,而不是无限长。只要文本长度等于或大于允许的最大长度,它将继续发出嘟嘟声。