Delen via


Overzicht van het gebruik van het toetsenbord (Windows Forms .NET)

In Windows Forms wordt gebruikersinvoer verzonden naar toepassingen in de vorm van Windows-messages. Een reeks overschrijfbare methoden verwerken deze berichten op het niveau van de toepassing, het formulier en het besturingselement. Wanneer deze methoden toetsenbordberichten ontvangen, genereren ze gebeurtenissen die kunnen worden verwerkt om informatie over de toetsenbordinvoer op te halen. In veel gevallen kunnen Windows Forms-toepassingen alle gebruikersinvoer verwerken door op deze gebeurtenissen te reageren. In andere gevallen moet een toepassing mogelijk een van de methoden overschrijven die berichten verwerken om een bepaald bericht te onderscheppen voordat het wordt ontvangen door de toepassing, het formulier of het besturingselement.

Toetsenbordevenementen

Alle Besturingselementen van Windows Forms nemen een reeks gebeurtenissen over die betrekking hebben op muis- en toetsenbordinvoer. Een besturingselement kan bijvoorbeeld de KeyPress gebeurtenis verwerken om de tekencode te bepalen van een toets die is ingedrukt. Voor meer informatie, zie Toetsenbordevenementen gebruiken.

Methoden voor het verwerken van gebruikersinvoerberichten

Formulieren en besturingselementen hebben toegang tot de IMessageFilter-interface en een set overschrijfbare methoden waarmee Windows-berichten op verschillende punten in de berichtenwachtrij worden verwerkt. Deze methoden hebben allemaal een Message parameter, die de details van Windows-berichten op laag niveau inkapselt. U kunt deze methoden implementeren of overschrijven om het bericht te onderzoeken en vervolgens het bericht te gebruiken of door te geven aan de volgende consument in de berichtenwachtrij. De volgende tabel bevat de methoden voor het verwerken van alle Windows-berichten in Windows Forms.

Methode Notities
PreFilterMessage Met deze methode worden Windows-berichten die in de wachtrij geplaatst zijn (ook wel gepost genoemd) onderschept op toepassingsniveau.
PreProcessMessage Met deze methode worden Windows-meldingen onderschept op formulier- en controle-niveau voordat ze zijn verwerkt.
WndProc Met deze methode worden Windows-berichten op formulier- en besturingsniveau verwerkt.
DefWndProc Met deze methode wordt de standaardverwerking van Windows-berichten uitgevoerd op formulier- en besturingsniveau. Dit biedt de minimale functionaliteit van een venster.
OnNotifyMessage Met deze methode worden berichten onderschept op formulier- en besturingsniveau, nadat ze zijn verwerkt. De EnableNotifyMessage stijlbit moet worden ingesteld om deze methode aan te roepen.

Toetsenbord- en muisberichten worden ook verwerkt door een extra set overschrijfbare methoden die specifiek zijn voor deze typen berichten. Zie de sectie Voorverwerkingssleutels voor meer informatie. .

Typen sleutels

Windows Forms identificeert toetsenbordinvoer als codes voor virtuele toetsen die worden vertegenwoordigd door de bitwise Keys opsomming. Met de opsomming Keys kunt u een reeks ingedrukt toetsen combineren om één waarde te geven. Deze waarden komen overeen met de waarden die bij de WM_KEYDOWN- en WM_SYSKEYDOWN Windows-berichten horen. U kunt de meeste fysieke toetsdrukken detecteren door de KeyDown of KeyUp gebeurtenissen te verwerken. Tekensleutels zijn een subset van de Keys opsomming en komen overeen met de waarden die bij de WM_CHAR- en WM_SYSCHAR Windows-berichten horen. Als de combinatie van ingedrukt toetsen resulteert in een teken, kunt u het teken detecteren door de gebeurtenis KeyPress te verwerken.

Volgorde van toetsenbordevenementen

Zoals eerder vermeld, zijn er drie toetsenbordgerelateerde gebeurtenissen die kunnen optreden op een besturingselement. In de volgende volgorde ziet u de algemene volgorde van de gebeurtenissen:

  1. De gebruiker pusht de 'a'-sleutel, de sleutel wordt vooraf verwerkt, verzonden en er vindt een KeyDown gebeurtenis plaats.
  2. De gebruiker bevat de 'a'-sleutel, de sleutel wordt vooraf verwerkt, verzonden en er wordt een KeyPress gebeurtenis uitgevoerd. Deze gebeurtenis treedt meerdere keren op wanneer de gebruiker een sleutel bevat.
  3. De gebruiker publiceert de 'a'-sleutel, de sleutel wordt vooraf verwerkt, verzonden en er wordt een KeyUp gebeurtenis uitgevoerd.

Voorverwerkingssleutels

Net als andere berichten worden toetsenbordberichten verwerkt in de WndProc methode van een formulier of besturingselement. Voordat toetsenbordberichten worden verwerkt, roept de PreProcessMessage methode echter een of meer methoden aan die kunnen worden overschreven om speciale tekentoetsen en fysieke toetsen te verwerken. U kunt deze methoden overschrijven om bepaalde sleutels te detecteren en te filteren voordat de berichten door het besturingselement worden verwerkt. In de volgende tabel ziet u de actie die wordt uitgevoerd en de gerelateerde methode die plaatsvindt, in de volgorde waarin de methode plaatsvindt.

Voorverwerking voor een KeyDown-gebeurtenis

Actie Gerelateerde methode Notities
Controleer op een opdrachttoets, zoals een versneller of menusneltoets. ProcessCmdKey Deze methode verwerkt een opdrachtsleutel, die voorrang heeft op reguliere sleutels. Als deze methode trueretourneert, wordt het sleutelbericht niet verzonden en vindt er geen sleutelgebeurtenis plaats. Als deze falseretourneert, wordt IsInputKey.
Controleer of er een speciale toets is die voorverwerking vereist, of een normale tekentoets die een KeyDown-gebeurtenis moet genereren en naar een besturingselement moet worden verzonden. IsInputKey Als de methode trueretourneert, betekent dit dat de controle een normaal teken is en een KeyDown gebeurtenis wordt opgeroepen. Als false, wordt ProcessDialogKey aangeroepen. Opmerking: Om ervoor te zorgen dat een besturingselement een toets of combinatie van toetsen krijgt, kunt u de gebeurtenis PreviewKeyDown afhandelen en IsInputKey van de PreviewKeyDownEventArgs instellen op true voor de gewenste sleutel of toetsen.
Controleer op een navigatietoets (ESC, TAB, Enter of pijltoetsen). ProcessDialogKey Met deze methode wordt een fysieke toets verwerkt die gebruikmaakt van speciale functionaliteit binnen het besturingselement, zoals om de focus te schakelen tussen het besturingselement en het ouderbesturingselement. Als het directe besturingselement de sleutel niet verwerkt, wordt de ProcessDialogKey aangeroepen op het bovenliggende besturingselement en vervolgens op elk hoger gelegen besturingselement totdat het bovenste besturingselement in de hiërarchie is bereikt. Als deze methode trueretourneert, is voorverwerking voltooid en wordt er geen sleutelgebeurtenis gegenereerd. Als deze falseretourneert, treedt er een KeyDown gebeurtenis op.

Voorverwerking voor een KeyPress-gebeurtenis

Actie Gerelateerde methode Notities
Controleer of de sleutel een normaal teken is dat door het besturingselement moet worden verwerkt IsInputChar Als het teken een normaal teken is, retourneert deze methode true, wordt de KeyPress gebeurtenis gegenereerd en vindt er geen verdere voorverwerking plaats. Anders wordt ProcessDialogChar aangeroepen.
Controleer of het karakter een mnemonic is (zoals &OK op een knop) ProcessDialogChar Deze methode, vergelijkbaar met ProcessDialogKey, wordt binnen de besturingshiërarchie aangeroepen. Als het besturingselement een containerbesturingselement is, wordt gecontroleerd op mnemonics door ProcessMnemonic voor zichzelf en zijn onderliggende besturingselementen aan te roepen. Als ProcessDialogChartrueretourneert, vindt er geen KeyPress gebeurtenis plaats.

Toetsenbordberichten verwerken

Nadat toetsenbordberichten de WndProc methode van een formulier of besturingselement bereiken, worden ze verwerkt door een set methoden die kunnen worden overschreven. Elk van deze methoden retourneert een Boolean waarde die aangeeft of het toetsenbordbericht is verwerkt en gebruikt door het besturingselement. Als een van de methoden trueretourneert, wordt het bericht beschouwd als verwerkt en wordt het niet doorgegeven aan het basis- of bovenliggende besturingselement voor verdere verwerking. Anders blijft het bericht in de berichtenwachtrij en kan het worden verwerkt in een andere methode in het basis- of bovenliggende besturingselement. De volgende tabel bevat de methoden voor het verwerken van toetsenbordberichten.

Methode Notities
ProcessKeyMessage Met deze methode worden alle toetsenbordberichten verwerkt die worden ontvangen door de WndProc methode van het besturingselement.
ProcessKeyPreview Met deze methode wordt het toetsenbordbericht naar het bovenliggende besturingselement verzonden. Als ProcessKeyPreviewtrueretourneert, wordt er geen sleutelgebeurtenis gegenereerd, anders wordt ProcessKeyEventArgs aangeroepen.
ProcessKeyEventArgs Met deze methode worden de gebeurtenissen KeyDown, KeyPressen KeyUp, indien van toepassing, gegenereerd.

Toetsenbordmethoden overschrijven

Er zijn veel methoden beschikbaar om in te grijpen wanneer een toetsenbordbericht zowel voorafgaand aan de verwerking als tijdens de verwerking wordt afgehandeld; sommige methoden zijn echter veel betere keuzes dan andere. In de volgende tabel ziet u taken die u mogelijk wilt uitvoeren en de beste manier om de toetsenbordmethoden te overschrijven. Zie Overname (C#-programmeerhandleiding) voor meer informatie over het overschrijven van methoden of Overname (Visual Basic)

Taak Methode
Onderschep een navigatiesleutel en genereer een KeyDown-gebeurtenis. U wilt bijvoorbeeld dat TAB en Return worden verwerkt in een tekstvak. Overschrijven IsInputKey. Opmerking: U kunt ook de gebeurtenis PreviewKeyDown afhandelen en IsInputKey van de PreviewKeyDownEventArgs instellen op true voor de gewenste sleutel of sleutels.
Voer speciale invoer- of navigatieafhandeling uit op een besturingselement. U wilt bijvoorbeeld dat het gebruik van pijltoetsen in het lijstbeheer het geselecteerde item wijzigt. ProcessDialogKey overschrijven
Onderschep een navigatiesleutel en genereer een KeyPress-gebeurtenis. In een kringveldbesturingselement wilt u bijvoorbeeld meerdere pijltoetsen gebruiken om de voortgang door de items te versnellen. Overschrijven IsInputChar.
Voer speciale invoer- of navigatieafhandeling uit tijdens een KeyPress-evenement. In een lijstcontrole wordt door het ingedrukt houden van de toets "r" overgeslagen naar items die beginnen met de letter "r". ProcessDialogChar buiten werking stellen
Aangepaste nemonische verwerking uitvoeren; U wilt bijvoorbeeld mnemonics afhandelen op door de eigenaar getekende knoppen in een werkbalk. Overschrijven ProcessMnemonic.

Zie ook