Přehled používání klávesnice (model Windows Forms .NET)

V model Windows Forms se uživatelský vstup odesílá do aplikací ve formě zpráv systému Windows. Řada přepisovatelných metod zpracovává tyto zprávy na úrovni aplikace, formuláře a řízení. Když tyto metody přijímají zprávy klávesnice, vyvolávají události, které lze zpracovat, aby získaly informace o vstupu klávesnice. V mnoha případech budou model Windows Forms aplikace moci zpracovávat všechny vstupy uživatelů jednoduše zpracováním těchto událostí. V jiných případech může aplikace potřebovat přepsat jednu z metod, které zpracovávají zprávy, aby bylo možné zachytit určitou zprávu před tím, než ji aplikace, formulář nebo ovládací prvek přijme.

Důležité

Dokumentace k desktopové příručce pro .NET 7 a .NET 6 se právě připravuje.

Události klávesnice

Všechny ovládací prvky model Windows Forms dědí sadu událostí souvisejících se vstupem myši a klávesnice. Ovládací prvek může například zpracovat KeyPress událost a určit kód znaku stisknuté klávesy. Další informace najdete v tématu Použití událostí klávesnice.

Metody, které zpracovávají zprávy uživatelského vstupu

Formuláře a ovládací prvky mají přístup k IMessageFilter rozhraní a sadě přepisovatelných metod, které zpracovávají zprávy systému Windows v různých bodech fronty zpráv. Všechny tyto metody mají Message parametr, který zapouzdřuje podrobnosti nízké úrovně zpráv systému Windows. Tyto metody můžete implementovat nebo přepsat, abyste zprávu prozkoumali a pak ji buď spotřebovali, nebo ji předali dalšímu příjemci ve frontě zpráv. Následující tabulka obsahuje metody, které zpracovávají všechny zprávy systému Windows v model Windows Forms.

metoda Notes
PreFilterMessage Tato metoda zachytí zprávy windows zařazené do fronty (označované také jako publikované) na úrovni aplikace.
PreProcessMessage Tato metoda zachycuje zprávy systému Windows na úrovni formuláře a ovládacího prvku před jejich zpracováním.
WndProc Tato metoda zpracovává zprávy systému Windows na úrovni formuláře a ovládacího prvku.
DefWndProc Tato metoda provádí výchozí zpracování zpráv systému Windows na úrovni formuláře a ovládacího prvku. To poskytuje minimální funkčnost okna.
OnNotifyMessage Tato metoda zachycuje zprávy na úrovni formuláře a ovládacího prvku po jejich zpracování. Bit EnableNotifyMessage stylu musí být nastaven pro tuto metodu, která má být volána.

Zprávy klávesnice a myši jsou také zpracovány další sadou přepisovatelných metod, které jsou specifické pro tyto typy zpráv. Další informace najdete v části Klíče předběžného zpracování. .

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í WM_CHAR a WM_SYSCHAR zprávy systému Windows. Pokud kombinace stisknutých kláves vede ke znaku, můžete ho KeyPress zjistit zpracováním události.

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í klávesových metod

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 Dědičnost (Průvodce programováním v C#) nebo dědičnost (Visual Basic)

Ú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é