Сочетание клавиш выполняется без нажатия клавиши ALT в Windows Forms - PullRequest
0 голосов
/ 11 января 2019

Я тестирую способы создания ярлыка для кнопок. Один из найденных мной способов состоял в том, чтобы добавить амперсанд (&) перед свойством text кнопки, чтобы при нажатии пользователем клавиши ALT с первой буквой кнопки запускалось событие нажатия кнопки этой кнопки. Проблема в том, что происходит событие нажатия кнопки, даже если пользователь нажимает только соответствующую букву без клавиши ALT.

Ответы [ 2 ]

0 голосов
/ 14 января 2019

То же, что и Ускоритель (мнемоническая клавиша) выполняется без нажатия клавиши ALT

Это происходит в элементах управления, где нет возможностей редактирования, например, кнопки, переключателя, флажка и т. Д. Вы можете подавить это поведение, создав пользовательскую кнопку, переопределив метод ProcessMnemonic и вернув false, если клавиша alt не нажата.

public class CustomButton : Button
{
    protected override bool ProcessMnemonic(char charCode)
    {
        if ((Control.ModifierKeys & Keys.Alt) == Keys.None)
            return false;
        return base.ProcessMnemonic(charCode);
    }
}
0 голосов
/ 13 января 2019

Вы можете попытаться разместить отдельные 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...