Sdílet prostřednictvím


Jak funguje vstup z klávesnice

model Windows Forms zpracovává vstup klávesnice vyvoláním událostí klávesnice v reakci na zprávy systému Windows. Většina model Windows Forms aplikací zpracovává vstup klávesnice výhradně zpracováním událostí klávesnice. Potřebujete ale pochopit, jak fungují zprávy klávesnice, abyste mohli implementovat pokročilejší scénáře zadávání klávesnice, například zachycení kláves před dosažením ovládacího prvku. Toto téma popisuje typy klíčových dat, které model Windows Forms rozpozná a poskytuje přehled o směrování zpráv pomocí klávesnice. Informace o událostech klávesnice naleznete v tématu Použití událostí klávesnice.

Typy klíčů

model Windows Forms identifikuje vstup klávesnice jako kódy virtuálních kláves, které jsou reprezentovány bitovým Keys výčtem. Pomocí výčtu Keys můžete zkombinovat řadu stisknutých kláves, aby vznikla jedna hodnota. Tyto hodnoty odpovídají hodnotám, které doprovázejí zprávy WM_KEYDOWN a WM_SYSKEYDOWN Windows. Většinu fyzických stisknutí kláves můžete zjistit zpracováním KeyDown událostí nebo KeyUp událostí. Znakové klíče jsou podmnožinou výčtu Keys a odpovídají hodnotám, které doprovázejí zprávy WM_CHAR a WM_SYSCHAR Windows. Pokud kombinace stisknutých kláves vede ke znaku, můžete ho KeyPress zjistit zpracováním události. Alternativně můžete použít Keyboard, vystavené programovacím rozhraním jazyka Visual Basic, zjistit, které klávesy byly stisknuty a odesílány klávesy. Další informace najdete v tématu Přístup k klávesnici.

Pořadí událostí klávesnice

Jak je uvedeno výše, na ovládacím prvku můžou nastat 3 události související s klávesnicí. Následující posloupnost ukazuje obecné pořadí událostí:

  1. Uživatel nasdílí klíč "a", klíč je předem zpracován, odeslán a KeyDown nastane událost.

  2. Uživatel obsahuje klíč "a", klíč je předzpracován, odeslán a dojde k KeyPress události.

    K této události dochází několikrát, protože uživatel uchovává klíč.

  3. Uživatel uvolní klíč "a", klíč je předzpracován, odeslán a KeyUp nastane událost.

Klíče předběžného zpracování

Stejně jako jiné zprávy se zprávy klávesnice zpracovávají v WndProc metodě formuláře nebo ovládacího prvku. Před zpracováním PreProcessMessage zpráv klávesnice však metoda volá jednu nebo více metod, které lze přepsat, aby zpracovávaly speciální znakové klávesy a fyzické klávesy. Tyto metody můžete přepsat, abyste před zpracováním zpráv detekovali a vyfiltrovali určité klíče. Následující tabulka ukazuje akci, která se provádí, a související metodu, která nastane v pořadí, v jakém se metoda vyskytuje.

Předběžné zpracování události KeyDown

Akce Související metoda Notes
Zkontrolujte příkazový klíč, jako je akcelerátor nebo zástupce nabídky. ProcessCmdKey Tato metoda zpracovává příkazový klíč, který má přednost před běžnými klíči. Pokud tato metoda vrátí true, zpráva klíče není odeslána a k události klíče nedojde. Pokud se vrátí false, IsInputKey je volána.
Zkontrolujte speciální klíč, který vyžaduje předběžné zpracování nebo normální znakový klíč, který by měl vyvolat KeyDown událost a být odeslán do ovládacího prvku. IsInputKey Pokud metoda vrátí true, znamená to, že ovládací prvek je běžný znak a KeyDown je vyvolána událost. Pokud falsese ProcessDialogKey volá , je volána. Poznámka: Chcete-li zajistit, aby ovládací prvek získal klíč nebo kombinaci kláves, můžete zpracovat PreviewKeyDown událost a nastavit IsInputKeyPreviewKeyDownEventArgs pro klíč nebo klíče, které true chcete použít.
Zkontrolujte navigační klávesu (ESC, TAB, Return nebo šipkové klávesy). ProcessDialogKey Tato metoda zpracovává fyzický klíč, který využívá speciální funkce v rámci ovládacího prvku, například přepínání fokusu mezi ovládacím prvku a jeho nadřazeným objektem. Pokud okamžitý ovládací prvek nezpracuje klíč, ProcessDialogKey volá se nadřazený ovládací prvek a tak dále na nejvyšší ovládací prvek v hierarchii. Pokud tato metoda vrátí true, předběžné zpracování je dokončeno a klíč událost není generována. Pokud se vrátí false, dojde k KeyDown události.

Předběžné zpracování události KeyPress

Akce Související metoda Notes
Zkontrolujte, jestli je klíč normálním znakem, který by měl ovládací prvek zpracovat. IsInputChar Pokud je znak normální znak, tato metoda vrátí true, KeyPress událost je vyvolána a nedojde k žádnému dalšímu předběžnému zpracování. Jinak ProcessDialogChar bude volána.
Zkontrolujte, jestli je znak mnemonic (například &OK na tlačítku). ProcessDialogChar Tato metoda, podobně jako ProcessDialogKey, bude volána řídicí hierarchie. Pokud je ovládací prvek kontejneru, kontroluje měmonics voláním ProcessMnemonic sebe sama a jeho podřízených ovládacích prvků. Pokud ProcessDialogChar se vrátí true, nedojde k KeyPress události.

Zpracování zpráv klávesnice

Jakmile se zprávy klávesnice dostanou k WndProc metodě formuláře nebo ovládacího prvku, zpracuje je sada metod, které je možné přepsat. Každá z těchto metod vrátí Boolean hodnotu určující, zda byla zpráva klávesnice zpracována a spotřebována ovládacím prvku. Pokud jedna z metod vrátí true, zpráva je považována za zpracována a není předána do základu ovládacího prvku nebo nadřazeného prvku pro další zpracování. Jinak zpráva zůstane ve frontě zpráv a může být zpracována v jiné metodě v základu nebo nadřazené ovládacího prvku. Následující tabulka obsahuje metody, které zpracovávají zprávy klávesnice.

metoda Notes
ProcessKeyMessage Tato metoda zpracovává všechny zprávy klávesnice přijaté metodou WndProc ovládacího prvku.
ProcessKeyPreview Tato metoda odešle zprávu klávesnice nadřazené ovládacího prvku. Pokud ProcessKeyPreview se vrátí true, negeneruje se žádná událost klíče, jinak ProcessKeyEventArgs se volá.
ProcessKeyEventArgs Tato metoda podle potřeby vyvolá KeyDown, KeyPressa KeyUp události.

Přepsání metod klávesnice

Při předběžném zpracování a zpracování zprávy pomocí klávesnice je k dispozici mnoho metod přepsání; některé metody jsou ale mnohem lepší než jiné. V následující tabulce najdete úkoly, které můžete chtít provést, a nejlepší způsob, jak přepsat metody klávesnice. Další informace o přepsání metod naleznete v tématu Přepsání vlastností a metod v odvozených třídách.

Úloha metoda
Zachytí navigační klíč a vyvolá KeyDown událost. Například chcete, aby se klávesa TAB a Return zpracovávala v textovém poli. Přepsat IsInputKey. Poznámka: Případně můžete zpracovat PreviewKeyDown událost a nastavit IsInputKeyPreviewKeyDownEventArgs klíč nebo klíče, které true chcete použít.
Provádění speciálního vstupu nebo zpracování navigace u ovládacího prvku Chcete například, aby se vybraná položka změnila pomocí kláves se šipkami v ovládacím prvku seznamu. Přepsat ProcessDialogKey
Zachytí navigační klíč a vyvolá KeyPress událost. Například v ovládacím prvku číselníku chcete, aby více kláves se šipkami urychlilo procházení položek. Přepsat IsInputChar.
Během události můžete provádět speciální vstup nebo zpracování KeyPress navigace. Například v ovládacím prvku seznamu podržení klávesy "r" přeskočí mezi položkami, které začínají písmenem r. Přepsat ProcessDialogChar
Provádět vlastní měmónní zpracování; Chcete například zpracovat mnemonics na tlačítkách nakreslených vlastníkem obsažených na panelu nástrojů. Přepsat ProcessMnemonic.

Viz také