在Windows窗体上执行快捷键而没有按ALT键的情况下

时间:2019-01-11 13:04:56

标签: windows forms

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

2 个答案:

答案 0 :(得分:0)

您可以尝试为控件放置单独的 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

答案 1 :(得分:0)

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);
    }
}