Ускоритель (мнемоническая клавиша) выполняется без нажатия клавиши ALT - PullRequest
5 голосов
/ 21 декабря 2011

У меня возникают проблемы с использованием мнемонических клавиш в Windows Forms :

Просто наличие формы с кнопкой, которая использует ALT + s в качестве ускорителя:

this.searchButton = new System.Windows.Forms.Button();
this.searchButton.Text = "&search";

Действие кнопки выполняется простым нажатием «s» (без нажатия клавиши ALT). Я проверил некоторые другие приложения, и действия акселератора выполняются только при нажатии клавиши ALT.

  • Это проблема .NET?
  • Как можно решить эту проблему?

Заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 21 декабря 2011

Вы можете изменить это поведение, вставив этот фрагмент в вашу форму:

    protected override bool ProcessDialogChar(char charCode) {
        if ((Control.ModifierKeys & Keys.Alt) == Keys.None) return false;
        return base.ProcessDialogChar(charCode);
    }

Не на 100% уверен, что у этого не будет других побочных эффектов, обработка клавиатуры в Winforms сложна, мягко говоря.

2 голосов
/ 21 декабря 2011

Это нормальное поведение для .NET (они говорят, что «по замыслу»).

Вот статья, которая должна помочь в решении вашей проблемы - не простая и не приятная для начала, но как только она будет сделанаможно легко добавить любые настроенные вами сочетания клавиш:

Встраивание ускорителей клавиатуры в приложения .NET Windows Forms - Code Guru

По сути, это решение включает создание классазагрузка хеш-таблицы и переопределение ProcessCmdKey для настройки собственного обработчика ускорителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...