【问题标题】:WinForms ALT key beepWinForms ALT 键蜂鸣
【发布时间】:2014-07-11 08:43:55
【问题描述】:

我有一个应用程序,其中我为给定的一组操作实现了一些键盘快捷键,其中一些使用 ALT 作为修饰符,例如ALT + 1。该功能本身工作正常,但系统在按键期间发出哔哔声。

我已经阅读了各种帖子,说我可以在 KeyPress 事件中使用 e.Handled ,但这对我的场景没有帮助。这个问题很容易通过创建一个新的 Windows 窗体应用程序并在不进行任何修改的情况下运行它来复制,例如按 ALT + 1 会导致系统发出哔哔声。

我注意到其他应用程序(例如记事本)也有这种行为,如果您启动记事本并按 ALT + J(或任何其他无效的菜单按键)系统会发出哔哔声。

有什么方法可以防止通过我的应用程序发出哔声还是标准的 Windows 行为?

【问题讨论】:

  • 我认为这是为了提醒用户她正在选择未定义的菜单快捷方式。您可以尝试添加定义了这些快捷方式的隐藏菜单条目。
  • 这是标准的 Windows 行为。如果您在“控制面板”->“声音”中查找名为“菜单命令”的声音效果,那就是播放的内容。我正在使用的当前声音方案(Windows 7 提供的声音方案之一)只是将声音效果设为空白。如果您只想为您的 PC 删除它,那么我建议在控制面板中进行修改。

标签: c# vb.net winforms


【解决方案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 函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多