WinForms ALT 键蜂鸣
Posted
技术标签:
【中文标题】WinForms ALT 键蜂鸣【英文标题】:WinForms ALT key beep 【发布时间】:2014-07-11 08:43:55 【问题描述】:我有一个应用程序,其中我为给定的一组操作实现了一些键盘快捷键,其中一些使用 ALT 作为修饰符,例如ALT + 1。该功能本身工作正常,但系统在按键期间发出哔哔声。
我已经阅读了各种帖子,说我可以在 KeyPress 事件中使用 e.Handled ,但这对我的场景没有帮助。这个问题很容易通过创建一个新的 Windows 窗体应用程序并在不进行任何修改的情况下运行它来复制,例如按 ALT + 1 会导致系统发出哔哔声。
我注意到其他应用程序(例如记事本)也有这种行为,如果您启动记事本并按 ALT + J(或任何其他无效的菜单按键)系统会发出哔哔声。
有什么方法可以防止通过我的应用程序发出哔声还是标准的 Windows 行为?
【问题讨论】:
我认为这是为了提醒用户她正在选择未定义的菜单快捷方式。您可以尝试添加定义了这些快捷方式的隐藏菜单条目。 这是标准的 Windows 行为。如果您在“控制面板”->“声音”中查找名为“菜单命令”的声音效果,那就是播放的内容。我正在使用的当前声音方案(Windows 7 提供的声音方案之一)只是将声音效果设为空白。如果您只想为您的 PC 删除它,那么我建议在控制面板中进行修改。 【参考方案1】:您可以处理 KeyDown 事件并为 Alt+1 执行类似的操作,但我怀疑您可能必须对所有无效键执行此操作
private void keyDown(object sender, KeyEventArgs e)
if (e.KeyCode >= Keys.D1 && e.Alt)
e.Handled = true;
e.SuppressKeyPress = true;
【讨论】:
【参考方案2】:您可以尝试在 KeyPress 事件管理中使用 SuppressKeyPress 吗?
e.SuppressKeyPress = true;
【讨论】:
我尝试将表单 KeyPreview 设置为 True,并为 KeyDown、KeyPress 和 KeyUp 事件添加断点,并且在输入任何一个之前都会发出哔声。 好的,我会尝试制作相同的代码,看看是否找到了解决方案【参考方案3】:在某些情况下,我使用 Alt+E 来编辑记录。 这是我必须做的以消除哔哔声。
private void Object_KeyUp(object sender, KeyEventArgs e)
if (e.KeyCode == Keys.E && e.Alt)
e.SuppressKeyPress = true;
private void Object_KeyUp(object sender, KeyEventArgs e)
if (e.KeyCode == Keys.E && e.Alt)
e.SuppressKeyPress = true;
EditRecord(); // This opens a form for the editing process
注意:如果您尝试使用 Object_KeyDown 中的 EditRecord 并且仅在 Object_KeyUp 中使用 SuppressKeyPress,您仍然会听到哔声。
【讨论】:
您的代码无法运行。你不能有 2 个Object_KeyUp
函数。以上是关于WinForms ALT 键蜂鸣的主要内容,如果未能解决你的问题,请参考以下文章
WinForms界面控件初探:互动精准强大的Map Control