Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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:
- A felhasználó leküldi az A kulcsot, a kulcsot előre feldolgozták, elküldték, és KeyDown esemény történik.
- 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.
- 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 true ad 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 ProcessKeyPreviewtrue ad 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
.NET Desktop feedback