如何防止在WinForms TextBox中按下alt键引起的哔声?

Posted

技术标签:

【中文标题】如何防止在WinForms TextBox中按下alt键引起的哔声?【英文标题】:How to prevent the beep sound caused by alt key pressed in a WinForms TextBox? 【发布时间】:2009-04-06 17:17:43 【问题描述】:

我正在创建一个例程,允许用户将键盘快捷键复制到文本框中以进行“自定义键盘快捷键”自定义,但每次按下 alt 键和另一个字母时,它都会产生另一种声音。

我正在捕获 textbox_keydown 事件中的键,以将修饰符 + 其他键解析为可读的 Shift + A 或 Ctrl + Shift + B 方式进入同一个文本框。我应该在 textbox_previewkey 而不是 textbox_keydown 之类的不同事件中执行此操作吗?如何防止 alt 修饰键 + 字母或数字导致哔声?

文本框只是一个普通的 .net 3.5 文本框,它的唯一编辑属性是 ReadOnly 属性为 false。有没有更好的方法可以重新执行此操作?

我目前只是检查是否按下了任何修饰键,然后按下 + a-z 或 0-9,然后继续将适当按下的键输入到同一个文本框中,如 Shift + A 或 Ctrl + Shift + Y。

【问题讨论】:

+1 您的问题和回答对我很有用。谢谢。 如果您在方法调用中有一个消息框,事情可能不会按预期工作。见cannot-disable-beep-sound-on-textbox-keydown-event 【参考方案1】:

处理 TextBox 的 KeyDown 事件,例如使用 void HandleKeyDown(object source, KeyEventArgs e) 并在里面输入:if (e.Alt) e.SuppressKeyPress = true;

(也适用于 Return 键)

【讨论】:

【参考方案2】:

忽略,我能够通过从一开始就抑制键码来解决问题,而不会影响其正常功能。这是我使用的:

e.SuppressKeyPress = (e.KeyCode == e.KeyCode);

【讨论】:

你意识到这和说 e.SuppressKeyPress = true 一样吧? 除非KeyCode 返回double.Nan ;)【参考方案3】:

您需要设置e.Handled = true; 以防止击键冒泡。

【讨论】:

您好,我遇到了同样的问题,e.Handled = true 没有解决问题。 e.SuppressKeyPress = true 做到了。

以上是关于如何防止在WinForms TextBox中按下alt键引起的哔声?的主要内容,如果未能解决你的问题,请参考以下文章

检查是不是在 Winforms 中按下热键

如何判断何时在 TextBox 中按下回车键?

使用 OnKeyUp 在 TextBox 中按下 Enter 时避免 Windows 'Ding'

当鼠标仍然按下时,如何防止在 Winforms Listview 中立即触发 MouseUp 事件?

如何防止在android片段中按下后退按钮时调用onCreateView

如何防止在 JavaFX 中按下 SPACE 键时关闭 AutoCompleteCombobox 弹出菜单