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:
- De gebruiker pusht de 'a'-sleutel, de sleutel wordt vooraf verwerkt, verzonden en er vindt een KeyDown gebeurtenis plaats.
- 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.
- 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 true retourneert, wordt het sleutelbericht niet verzonden en vindt er geen sleutelgebeurtenis plaats. Als deze false retourneert, 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 true retourneert, 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 true retourneert, is voorverwerking voltooid en wordt er geen sleutelgebeurtenis gegenereerd. Als deze false retourneert, 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 ProcessDialogChartrue retourneert, 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 true
retourneert, 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 ProcessKeyPreviewtrue retourneert, 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
- Keys
- WndProc
- PreProcessMessage
- Toetsenbord gebeurtenissen (Windows Forms .NET) gebruiken
- Hoe toetsenbordevenementen wijzigen (Windows Forms .NET)
- Controleren op indrukken van wijzigingstoetsen (Windows Forms .NET)
- Toetsenbordgebeurtenissen (Windows Forms .NET) simuleren
- Toetsenbordinvoerberichten verwerken in het formulier (Windows Forms .NET)
- Een besturingselement (Windows Forms .NET) toevoegen
.NET Desktop feedback