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