Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Ve Windows Forms se uživatelský vstup odesílá do aplikací ve formě zpráv systému Windows. Řada metod, které lze přepsat, zpracovává tyto zprávy na úrovni aplikace, formuláře a ovládacích prvků. 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 můžou aplikace Windows Forms 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 před přijetím aplikace, formuláře nebo ovládacího prvku zachytila určitou zprávu.
Události klávesnice
Všechny ovládací prvky 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 naleznete v části 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 rozhraní IMessageFilter a sadě přepisovatelných metod, které zpracovávají zprávy systému Windows v různých bodech ve frontě zpráv. Všechny tyto metody mají parametr Message, který zapouzdřuje podrobnosti zpráv systému Windows na nízké úrovni. 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 modelu Windows Forms.
| Metoda | Poznámky |
|---|---|
| PreFilterMessage | Tato metoda zachytí zprávy Windows zařazené do fronty (označované také jako odeslané) 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 stylu EnableNotifyMessage musí být nastaven, aby byla tato metoda volána. |
Zprávy klávesnice a myši jsou zpracovává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íčů
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 událostí KeyDown nebo KeyUp. 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 rozpoznat zpracováním KeyPress události. Alternativně můžete použít Keyboard, který je poskytován programovacím rozhraním jazyka Visual Basic, k zjištění, které klávesy byly stisknuty, a k odeslání kláves. Další informace naleznete v tématu Přístup k klávesnici (Visual Basic).
Pořadí událostí klávesnice
Jak je uvedeno výše, existují tři události související s klávesnicí, které mohou na ovládacím prvku nastat. Následující posloupnost ukazuje obecné pořadí událostí:
- Uživatel stiskne klávesu A, klávesa je předzpracována, odeslána a událost KeyDown nastane.
- Uživatel stiskne klávesu A, klávesa je předzpracována, odeslána a nastane KeyPress událost. K této události dochází několikrát, protože uživatel uchovává klíč.
- Uživatel uvolní klíč A , klíč je předem zpracová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 a rozpoznat a filtrovat před tím, než ovládací prvek zpracuje zprávy. 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
| Činnost | Související metoda | Poznámky |
|---|---|---|
| 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, klíčové zprávy se neodesílají a nedojde k události klíče. Pokud se vrátí false, IsInputKey je voláno. |
| 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: Pokud chcete zajistit, aby ovládací prvek získal klíč nebo kombinaci kláves, můžete zpracovat událost PreviewKeyDown a nastavit vlastnost IsInputKey objektu PreviewKeyDownEventArgs na true pro klíč nebo klávesy, které 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 na nadřazený ovládací prvek a tak dále až po nejvyšší ovládací prvek v hierarchii. Pokud tato metoda vrátí true, předběžné zpracování je dokončeno a není vygenerována klíčová událost. Pokud se vrátí false, dojde k KeyDown události. |
Předběžné zpracování události KeyPress
| Činnost | Související metoda | Poznámky |
|---|---|---|
| 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í. Volá se ProcessDialogChar jinak. |
| Zkontrolujte, jestli je znak pomůcka (například „&OK“ na tlačítku). | ProcessDialogChar | Tato metoda, podobně jako ProcessDialogKey, je volána v rámci řídicí hierarchie. Pokud je kontejnerový ovládací prvek, kontroluje mnemotechnické pomůcky voláním funkce ProcessMnemonic na sebe a jeho podřízené ovládací prvky. Pokud ProcessDialogChar vrátí true, nedojde k žádné události KeyPress. |
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í. V opačném případě zpráva zůstane ve frontě zpráv a může být zpracována jinou metodou v základu nebo v nadřazeném ovládacím prvku. Následující tabulka obsahuje metody, které zpracovávají zprávy klávesnice.
| Metoda | Poznámky |
|---|---|
| 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ému prvku ovládacího. Pokud se ProcessKeyPreview vrátí jako true, negeneruje se žádná událost klávesy, jinak se volá ProcessKeyEventArgs. |
| ProcessKeyEventArgs | Tato metoda podle potřeby vyvolá KeyDown, KeyPressa KeyUp události. |
Přepsání klávesových metod
Existuje mnoho metod pro přepsání, když je klávesová zpráva předem zpracována a následně zpracována; některé metody jsou však lepší volbou 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)
| Úkol | Metoda |
|---|---|
| Zachytí navigační klíč a vyvolá KeyDown událost. Například chcete, aby se tabulátor a Enter zpracovávaly v textovém poli. | Přepsat IsInputKey. Případně můžete zpracovat PreviewKeyDown událost a nastavit IsInputKey objektu PreviewKeyDownEventArgs na true pro klíč nebo klíče, které chcete. |
| 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. | Schvátit ProcessDialogKey |
| Zachytí navigační klíč a vyvolá KeyPress událost. Například u ovládacího prvku typu spinbox chcete, aby opakované stisknutí kláves se šipkami zrychlilo pohyb mezi položkami. | Přepsat IsInputChar. |
| Proveďte speciální zpracování vstupu nebo navigace během události KeyPress. Například v ovládacím prvku seznamu podržení klávesy R přeskočí mezi položkami, které začínají písmenem r. | Schvátit ProcessDialogChar |
| Provádět vlastní zpracování mnemonik; například chcete zpracovat mnemoniky na ručně kreslených tlačítkách v panelu nástrojů. | Přepsat ProcessMnemonic. |
Viz také
.NET Desktop feedback