2013-08-14 14 views
6

Mam element Menustrip na moim Form, a po naciśnięciu zamyka mój Form. Chcę utworzyć skrót klawiszowy dla mojej pozycji "ESC" MenuStrip, ale w ustawieniach "ShorcutKey" nie ma opcji dla ESC, czy jest jakiś sposób, żeby to zrobić, że jest to "ESC"? Muszę to pokazać na pozycji "ESC", która jest klawiszem skrótu.Czy można dodać skrót klawiszowy ESC?

Rozwiązanie to nie działa:

menuStripItem.ShortcutKeys = Keys.Escape; 
+2

Jaka jest sytuacja? Możesz być lepiej z "CancelButton". – Ryan

Odpowiedz

6

Nie sądzę, że istnieje bezpośredni Rozwiązaniem tego problemu, można użyć tego obejścia Ustaw ShortcutKeyDisplayString w kodzie

menuStripItem.ShortcutKeyDisplayString = "ESC"; 

W ramach KeyDown wydarzenie formularza sprawdzania, czy naciśnięto ESC i Close() formularz.

+0

Mam kod, który sprawia, że ​​mogę nacisnąć klawisz ESC, aby zamknąć program. Co chcę zrobić, to sprawić, aby wyświetlał w obszarze klawiszy skrótów, że klawisz skrótu to ESC – Dozer789

+0

Dzięki za spróbuj. – Dozer789

+1

Następnie, jak pokazano w moim kodzie, możesz ustawić właściwość 'ShortcutKeyDisplayString' jako' Escape'. Jeśli potrzebujesz po prostu pokazać ESC jako klawisz skrótu. – Kurubaran

8

Program WinForm jest wybredny w kwestii wybranego skrótu klawiaturowego. Zasadą jest, że musi to być klawisz funkcyjny (F1-F12) lub inny klucz z dołączonym Keys.Control lub Keys.Alt. Większa intencja polega na tym, że nie można przypadkowo zastąpić zwykłego klucza, który może być użyty w, powiedzmy, TextBox. Klawisz Escape normalnie obsługuje przycisk anulowania okna dialogowego.

Keys.Escape jest raczej wyjątkowy; Alt + Escape i Ctrl + Escape nie działają, ponieważ są to globalne klawisze skrótów w systemie Windows.

Nie można użyć właściwości ShortcutKeys; musisz inaczej rozpoznać klawisz Escape. Łatwo zrobić w klasie Form przez przesłonięcie metody ProcessCmdKey(). Wklej ten kod do swojego formularza:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 
    if (keyData == Keys.Escape) { 
     this.Close(); 
     return true; 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 
+2

To będzie działać, aby go zamknąć, ale mam już kod do tego. To, czego potrzebowałem, to pokazać skrót klawiszowy. – Dozer789

+1

@ Dozer789 Nawet jeśli masz kod do zamknięcia, ten kod jest lepszy, ponieważ możesz zapobiec domyślnemu procesowi klawisza poleceń, "ESC" to specjalny klawisz polecenia, który może działać nieoczekiwanie w niektórych przypadkach. Więc wyłączenie/przesłonięcie domyślnej akcji byłoby lepsze. –

+0

Mogę używać tego kodu do mojego programu, nie pamiętam. Jeśli nie, prawdopodobnie użyję tego kodu. – Dozer789

Powiązane problemy