Событие нажатия кнопки Fire с использованием комбинации клавиш в c # - PullRequest
3 голосов
/ 19 января 2012

Я создал пользовательскую кнопку, полученную из обычной кнопки .Net, и добавил следующее свойство, чтобы добавить комбинацию клавиш быстрого доступа:

public Keys ShortCutKey { get; set; }

Я хочу, чтобы эта комбинация запускала событие нажатия кнопкиКнопка, но не знаю, как реализовать это, когда кнопка находится на форме.Я знаю, что стандартный способ создания сочетания клавиш - это использование символа & перед символом сокращения, но мне нужно использовать комбинацию клавиш.

Есть идеи?

Большое спасибо

Ответы [ 2 ]

2 голосов
/ 19 января 2012

Переопределить метод ProcessCmdKey () формы для обнаружения сочетаний клавиш. Как это:

    private bool findShortCut(Control.ControlCollection ctls, Keys keydata) {
        foreach (Control ctl in ctls) {
            var btn = ctl as MyButton;
            if (btn != null && btn.ShortCutKey == keydata) {
                btn.PerformClick();
                return true;
            }
            if (findShortCut(ctl.Controls, keydata)) return true;
        }
        return false;
    }

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
        if (findShortCut(this.Controls, keyData)) return true;
        return base.ProcessCmdKey(ref msg, keyData);
    }

Где MyButton предполагается как пользовательский класс управления кнопками.

0 голосов
/ 19 января 2012

Я предполагаю, что вы используете WinForms, учитывая, что символ амперсанда используется в заголовках элемента управления WinForms для обозначения символа быстрого доступа. Если это так, то вы можете использовать метод Button.PerformClick() на WinForms Button, чтобы вызвать событие Click вручную.

Если это не так, и вы на самом деле используете WPF; затем взгляните на ссылку, которую Дмитрий опубликовал в своем комментарии для Привязки ввода WPF .

...