如何在尝试输入超过允许的字符时禁用 TextBox 的哔声

Posted

技术标签:

【中文标题】如何在尝试输入超过允许的字符时禁用 TextBox 的哔声【英文标题】:How to disable beep sound for TextBox while trying to enter more characters than allowed 【发布时间】:2018-01-06 22:56:57 【问题描述】:

我将我的TextBoxMaxLength 设置为4。当我尝试输入第 5 个字符时,会出现一些 Windows 系统提示音。如何禁用它?

【问题讨论】:

您可以尝试将最大值设置为 5,但程序在 4 时停止响应按键。 你能告诉我们是VB.Net还是C#? How do I prevent MaxLength beeping or prevent application beeping altogether?的可能重复 @JimHewitt 顺便说一句,这个问题是针对 visuab basic 的,但类似 【参考方案1】:

您可以使用KeyUp 事件处理程序简单地解决此问题:

textBox1.KeyUp += ( sender , e ) => e.SuppressKeyPress = true;

这将阻止窗口从文本框中获取最大长度信号。

【讨论】:

可能是e.SuppressKeyPress = true; 你是对的。 e.Handled 不处理已在消息队列中建立的未决 WM_CHAR 消息 - 因此设置 Handled = true 不会阻止 KeyPress 发生。 无论如何都会在 KeyDown 事件中发送。您应该将 .KeyUp 更改为 .KeyDown 以永久抑制它。 如果keydown事件被触发就没有问题了。这是 keyup 事件中的一个衬线,将防止文本框中出现更多字符。您需要在 keydown 事件中进行更多检查。 缺少检查 if(TextBox1.Text.Lenght ==4)。只需扩展 Lambda 【参考方案2】:

根据与 Sievajet 的讨论,尝试以下其他解决方案:

textBox1.KeyDown += (sender, e) => 
    TextBox tBox = sender as TextBox;
    if (tBox.Text.Length == tBox.MaxLength)
        e.SuppressKeyPress = true;
;

注意: 如果您发现两种解决方案都有效,请选择 Sievajet 的答案作为好的答案,我对结果更感兴趣,所以也许给我写评论。

【讨论】:

感谢@Jimi 和@Sievajet,我只使用了e.SuppressKeyPress = true;,这对我来说很好!

以上是关于如何在尝试输入超过允许的字符时禁用 TextBox 的哔声的主要内容,如果未能解决你的问题,请参考以下文章

WPF TextBox 允许输入数字及字母的工具类

WPF TextBox 允许输入数字及字母的工具类

C# textbox只允许小数点后输入两位怎么实现?

如何让wpf 中的textbox只能输入整型或浮点型呢??

如何控制TextBox的最打输入字符的长度

如何在文本更改时启用/禁用绑定到 ICommand 的按钮,而不是失去 TextBox 的焦点