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创建自定义热键

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

WinForms界面控件初探:互动精准强大的Map Control

Winforms MenuStrip 带下划线的热键字母

WinForms 互操作,从 WinForms 拖放 -> WPF

QGEditors.WinForms WinForms下使用的部分扩展控件