Megosztás a következőn keresztül:


A billentyűzet használatának áttekintése

A Windows Formsban a rendszer felhasználói bemenetet küld az alkalmazásoknak Windows-üzenetekformájában. Ezeket az üzeneteket számos felülírható metódus dolgozza fel az alkalmazás, az űrlap és a vezérlés szintjén. Amikor ezek a metódusok billentyűzetüzeneteket kapnak, eseményeket emelnek ki, amelyek kezelhetők a billentyűzetbemenettel kapcsolatos információk lekéréséhez. A Windows Forms-alkalmazások sok esetben egyszerűen feldolgozhatják az összes felhasználói bemenetet az események kezelésével. Más esetekben előfordulhat, hogy egy alkalmazásnak felül kell bírálnia az üzeneteket feldolgozó módszerek egyikét, hogy elfogjon egy adott üzenetet, mielőtt az alkalmazás, űrlap vagy vezérlő megkaphatná.

Billentyűzetesemények

Minden Windows Forms-vezérlő örökli az egér- és billentyűzetbemenethez kapcsolódó eseményeket. Egy vezérlő például képes kezelni a KeyPress eseményt a lenyomott kulcs karakterkódjának meghatározásához. További információ: Billentyűzetesemények használata.

A felhasználói beviteli üzeneteket feldolgozó módszerek

Az űrlapok és vezérlők hozzáféréssel rendelkeznek a IMessageFilter felülethez, valamint felülírható metódusok készletéhez, amelyek az üzenetsor különböző pontjain dolgozzák fel a Windows-üzeneteket. Ezek a metódusok mindegyike rendelkezik egy Message paraméterrel, amely a Windows-üzenetek alacsony szintű részleteit foglalja magában. Ezeket a metódusokat implementálhatja vagy felülbírálhatja az üzenet megvizsgálásához, majd felhasználhatja az üzenetet, vagy továbbíthatja azt az üzenetsor következő fogyasztójának. Az alábbi táblázat a Windows Forms összes Windows-üzenetét feldolgozó metódusokat mutatja be.

Metódus Jegyzetek
PreFilterMessage Ez a módszer alkalmazásszinten elfogja az üzenetsorba helyezett (más néven közzétett) Windows-üzeneteket.
PreProcessMessage Ez a módszer az űrlap és a vezérlés szintjén elfogja a Windows-üzeneteket a feldolgozásuk előtt.
WndProc Ez a módszer űrlap- és vezérlési szinten dolgozza fel a Windows-üzeneteket.
DefWndProc Ez a módszer a Windows-üzenetek alapértelmezett feldolgozását végzi el űrlap- és vezérlési szinten. Ez biztosítja az ablak minimális funkcióit.
OnNotifyMessage Ez a metódus a feldolgozásuk után az űrlap és a vezérlés szintjén elfogja az üzeneteket. A metódus meghívásához be kell állítani a EnableNotifyMessage stílusbitet.

A billentyűzet- és egérüzeneteket az ilyen típusú üzenetekre jellemző felülírható metódusok további készlete dolgozza fel. További információért tekintse meg a Előfeldolgozási kulcsok szakaszt.

Kulcstípusok

A Windows Forms a billentyűzetbemenetet virtuális kulcskódként azonosítja, amelyeket a bitenkénti Keys enumerálás jelöl. A Keys enumerálással egyetlen értéket eredményező lenyomott kulcsok sorozatát kombinálhatja. Ezek az értékek az WM_KEYDOWN és WM_SYSKEYDOWN Windows-üzenetekhez tartozó értékeknek felelnek meg. A legtöbb fizikai billentyűleütést észlelheti a KeyDown vagy KeyUp események kezelésével. A karakterkulcsok a Keys enumerálás részhalmazai, és megfelelnek az WM_CHAR és WM_SYSCHAR Windows-üzenetekhez tartozó értékeknek. Ha a lenyomott billentyűk kombinációja karaktert eredményez, a karaktert a KeyPress esemény kezelésével észlelheti. Másik lehetőségként használhatja a Visual Basic programozási felület által közzétett Keyboard, hogy felderítse, mely kulcsokat nyomták le és küldje el a kulcsokat. További információt a Billentyűzet elérése (Visual Basic) című témakörben talál.

A billentyűzetesemények sorrendje

A korábban felsoroltak szerint három billentyűzettel kapcsolatos esemény történhet egy vezérlőn. Az alábbi sorozat az események általános sorrendjét mutatja be:

  1. A felhasználó leküldi az A kulcsot, a kulcsot előre feldolgozták, elküldték, és KeyDown esemény történik.
  2. A felhasználó az A kulcsot tárolja, a kulcsot előre feldolgozták, elküldték, és KeyPress esemény történik. Ez az esemény többször fordul elő, amikor a felhasználó rendelkezik egy kulccsal.
  3. A felhasználó kiadja az A kulcsot, a kulcsot előre feldolgozták, elküldték, és KeyUp esemény történik.

Előfeldolgozási kulcsok

Más üzenetekhez hasonlóan a billentyűzetüzenetek is egy űrlap vagy vezérlőelem WndProc metódusában lesznek feldolgozva. A billentyűzetüzenetek feldolgozása előtt azonban a PreProcessMessage metódus egy vagy több olyan metódust hív meg, amelyek felülbírálásával kezelhetők a speciális karakterbillentyűk és a fizikai kulcsok. Ezeket a metódusokat felülbírálhatja bizonyos kulcsok észleléséhez és szűréséhez, mielőtt a vezérlő feldolgozza az üzeneteket. Az alábbi táblázat a végrehajtott műveletet és a kapcsolódó metódust mutatja be a metódus előfordulási sorrendjében.

KeyDown-esemény előfeldolgozása

Tevékenység Kapcsolódó módszer Jegyzetek
Keressen egy parancskulcsot, például egy gyorsítót vagy egy menüparancsot. ProcessCmdKey Ez a metódus egy parancskulcsot dolgoz fel, amely elsőbbséget élvez a normál kulcsokkal szemben. Ha ez a metódus visszatér true, a rendszer nem küldi el a kulcsüzenetet, és nem történik kulcsesemény. Ha false-t ad vissza, akkor IsInputKey-t hívják.-nek.
Ellenőrizze, hogy van-e olyan speciális kulcs, amely előfeldolgozást igényel, vagy egy normál karakterkulcsot, amely KeyDown eseményt hoz létre, és egy vezérlőbe küldi. IsInputKey Ha a metódus true-t ad vissza, ez azt jelenti, hogy a vezérlő normál karakter, és keletkezik egy KeyDown esemény. Ha false, ProcessDialogKey lesz meghívva. Megjegyzés: Annak érdekében, hogy egy vezérlő kulcsot vagy billentyűkombinációt kapjon, kezelheti a PreviewKeyDown eseményt, és beállíthatja a IsInputKey-et a PreviewKeyDownEventArgs-ban a kívánt kulcs vagy kulcsok true-ére.
Ellenőrizze, hogy van-e navigációs kulcs (ESC, TAB, Return vagy nyílbillentyűk). ProcessDialogKey Ez a módszer feldolgoz egy fizikai kulcsot, amely speciális funkciókat alkalmaz a vezérlőn belül, például a fókusz váltása a vezérlő és a szülő között. Ha az azonnali vezérlő nem kezeli a kulcsot, a ProcessDialogKey felhívásra kerül a szülő vezérlőn, és így tovább, egészen a hierarchia legfelső vezérlőjéhez. Ha ez a metódus visszatér true, az előfeldolgozás befejeződött, és a rendszer nem hoz létre kulcseseményt. Ha a visszatérő érték false, akkor egy KeyDown esemény következik be.

KeyPress-esemény előfeldolgozása

Tevékenység Kapcsolódó módszer Jegyzetek
Ellenőrizze, hogy a kulcs egy normál karakter-e, amelyet a vezérlőnek fel kell dolgoznia IsInputChar Ha a karakter egy normál karakter, ez a metódus truead vissza, a KeyPress esemény létrejön, és nem történik további előfeldolgozás. Ellenkező esetben ProcessDialogChar kerül meghívásra.
Ellenőrizze, hogy a karakter egy memóriatámogató jel-e (például &OK egy gombon) ProcessDialogChar Ezt a metódust a vezérlés hierarchiáján hasonlóan hívják meg, mint a ProcessDialogKey. Ha a vezérlő egy tárolóvezérlő, akkor önmagán és gyermekvezérlőin a ProcessMnemonic meghívásával ellenőrzi a mnemonikákat. Ha ProcessDialogChar visszaadja true, akkor nem történik meg a KeyPress esemény.

Billentyűzetüzenetek feldolgozása

Miután a billentyűzetüzenetek eljutnak egy űrlap vagy vezérlő WndProc metódusához, egy sor olyan metódus dolgozza fel őket, amelyeket felül lehet bírálni. Mindegyik metódus egy Boolean értéket ad vissza, amely meghatározza, hogy a billentyűzetüzenetet feldolgozta-e és felhasználta-e a vezérlő. Ha az egyik metódus visszatér true, akkor a rendszer kezeli az üzenetet, és a rendszer nem továbbítja a vezérlő bázisának vagy szülőjének további feldolgozás céljából. Ellenkező esetben az üzenet az üzenetsorban marad, és a vezérlő alap- vagy szülőeszközének egy másik metódusában is feldolgozható. Az alábbi táblázat a billentyűzetüzeneteket feldolgozó módszereket mutatja be.

Metódus Jegyzetek
ProcessKeyMessage Ez a metódus feldolgozza a vezérlő WndProc metódusa által fogadott összes billentyűzetüzenetet.
ProcessKeyPreview Ez a metódus elküldi a billentyűzetüzenetet a vezérlő szülőjének. Ha ProcessKeyPreviewtruead vissza, a rendszer nem hoz létre kulcseseményt, ellenkező esetben ProcessKeyEventArgs lesz meghívva.
ProcessKeyEventArgs Ez a módszer szükség szerint a KeyDown, KeyPressés KeyUp eseményeket emeli ki.

Billentyűzetmódszerek felülírása

Számos módszer áll rendelkezésre a billentyűzetüzenetek előfeldolgozása és feldolgozása során történő felülrendelésre; azonban néhány módszer jobb választás, mint mások. Az alábbi táblázat azokat a feladatokat mutatja be, amelyeket el szeretne végezni, és a billentyűzet módszerek felülírásának legjobb módja. További információ a felülírási módszerekről: Öröklés (C# programozási útmutató) vagy Öröklés (Visual Basic)

Feladatok Metódus
Egy navigációs billentyű elfogása és egy KeyDown esemény kiváltása. Például azt szeretné, hogy a Tab és az Enter szövegmezőben legyen kezelve. Felülírás IsInputKey. Másik lehetőségként kezelheti az PreviewKeyDown eseményt, és IsInputKey beállíthatja a PreviewKeyDownEventArgstrue értékét a kívánt kulcs vagy kulcsok számára.
Speciális beviteli vagy navigációs kezelést végezhet egy vezérlőn. Például azt szeretné, hogy a listavezérlő nyílbillentyűivel módosítsa a kijelölt elemet. Felülírás ProcessDialogKey
Egy navigációs billentyű elfogása és egy KeyPress esemény kiváltása. Például egy spin-box vezérlőelemben több nyílbillentyűt szeretne lenyomni az elemek előrehaladásának felgyorsításához. Felülírás IsInputChar.
A KeyPress esemény során speciális beviteli vagy navigációs kezelést végezhet. Egy listavezérlőben például az R billentyűt lenyomva az r betűvel kezdődő elemek között ugrik át. Felülírás ProcessDialogChar
Egyéni mnemonikus kezelés végrehajtása; Például az eszköztárban található tulajdonos által rajzolt gombok mnemonikáit szeretné kezelni. Felülírás ProcessMnemonic.

Lásd még