如何防止在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键引起的哔声?的主要内容,如果未能解决你的问题,请参考以下文章
使用 OnKeyUp 在 TextBox 中按下 Enter 时避免 Windows 'Ding'
当鼠标仍然按下时,如何防止在 Winforms Listview 中立即触发 MouseUp 事件?