【问题标题】:Button Shortcut being executed without ALT key being pressed on Windows Forms在 Windows 窗体上不按 ALT 键的情况下执行按钮快捷方式
【发布时间】:2019-01-11 13:04:55
【问题描述】:

我正在测试为按钮创建快捷方式的方法。我发现的一种方法是在按钮的文本属性之前添加一个与号 (&),以便当用户使用按钮的第一个字母按下 ALT 键时,它应该触发该按钮的按钮单击事件。问题是,即使用户只按下相应的字母,而没有按下 ALT 键,按钮单击事件也会被触发。

【问题讨论】:

    标签: windows forms


    【解决方案1】:

    您可以尝试为您的控件放置一个单独的 KeyDown 事件。下面的示例实现了 ToolStripMenu、DatagridView 的快速快捷方式。

    Private Sub Shortcuts_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles _
                ToolStrip1.KeyDown, dgvToolStrip.KeyDown, dgvDataTable.KeyDown
            If (e.KeyCode And Not Keys.Modifiers) = Keys.F5 Then
                btnRefresh.PerformClick()
            ElseIf e.KeyValue = Keys.Enter Then
                btnOK.PerformClick()
            ElseIf e.KeyValue = Keys.F10 Then 'AndAlso e.Modifiers = Keys.Shift Then
                btnShowAll.PerformClick()
            ElseIf (e.KeyCode And Not Keys.Modifiers) = Keys.P AndAlso e.Modifiers = Keys.Alt Then
                btnShowImage.PerformClick()
            End If
        End Sub
    

    【讨论】:

      【解决方案2】:

      Accelerator (mnemonic key) are executed without pressing ALT key

      这发生在没有编辑功能的控件中,例如按钮、单选按钮、复选框等。您可以通过创建自定义按钮来抑制此行为,覆盖 ProcessMnemonic 方法并在未按下 alt 键时返回 false。

      public class CustomButton : Button
      {
          protected override bool ProcessMnemonic(char charCode)
          {
              if ((Control.ModifierKeys & Keys.Alt) == Keys.None)
                  return false;
              return base.ProcessMnemonic(charCode);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2015-06-30
        • 2011-11-01
        • 2012-01-25
        • 2016-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多