Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In Windows Forms wordt gebruikersinvoer verzonden naar toepassingen in de vorm van Windows-messages. Een reeks methoden die overschrijfbaar zijn, verwerkt 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 afhandelen door deze gebeurtenissen te verwerken. In andere gevallen moet een toepassing mogelijk een van de methoden overschrijven waarmee berichten worden verwerkt 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 | Opmerkingen |
|---|---|
| PreFilterMessage | Met deze methode worden in de wachtrij geplaatste (ook wel gepost) Windows-berichten op toepassingsniveau onderschept. |
| PreProcessMessage | Met deze methode worden Windows-berichten op formulier- en controleniveau onderschept 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 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. U kunt ook Keyboardgebruiken, beschikbaar gesteld door de Visual Basic-programmeerinterface, om te ontdekken welke sleutels zijn ingedrukt en verzonden. Zie Het toetsenbord openen (Visual Basic) voor meer informatie.
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 treedt een KeyDown gebeurtenis op.
- De gebruiker heeft de A-sleutel , de sleutel wordt vooraf verwerkt, verzonden en er treedt een KeyPress gebeurtenis op. 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 treedt een KeyUp gebeurtenis op.
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 het besturingselement de berichten 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
| Handeling | Gerelateerde methode | Opmerkingen |
|---|---|---|
| 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 de toetsboodschap niet verzonden en vindt er geen toetsevenement 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 het bedieningselement een normaal teken is en een gebeurtenis KeyDown wordt gegenereerd. 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 het ProcessDialogKey bovenliggende besturingselement aangeroepen, enzovoort, naar het bovenste besturingselement in de hiërarchie. Als deze methode retourneert true, is voorverwerking voltooid en wordt er geen sleutelgebeurtenis gegenereerd. Als deze falseretourneert, treedt er een KeyDown gebeurtenis op. |
Voorverwerking voor een KeyPress-gebeurtenis
| Handeling | Gerelateerde methode | Opmerkingen |
|---|---|---|
| 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 button) | ProcessDialogChar | Deze methode, vergelijkbaar met ProcessDialogKey, wordt opgeroepen in de besturingshiërarchie. Als het besturingselement een containerbesturingselement is, wordt gecontroleerd op mnemonics door ProcessMnemonic voor zichzelf en zijn onderliggende besturingselementen aan te roepen. Als ProcessDialogChar retourneert true, vindt er KeyPress geen gebeurtenis plaats. |
Toetsenbordberichten verwerken
Nadat toetsenbordberichten de WndProc methode van een formulier of besturingselement hebben bereikt, 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 de waarde true retourneert, wordt het bericht beschouwd als afgehandeld 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 | Opmerkingen |
|---|---|
| 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 te overschrijven tijdens de verwerking van een toetsenbordbericht; sommige methoden zijn echter 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)
| Opdracht | Methode |
|---|---|
| Onderschep een navigatiesleutel en genereer een KeyDown-gebeurtenis. U wilt bijvoorbeeld dat Tab en Enter worden verwerkt in een tekstvak. | Overschrijf IsInputKey. U kunt ook de gebeurtenis PreviewKeyDown afhandelen en de IsInputKey van de PreviewKeyDownEventArgs instellen op true voor de sleutel of sleutels die u wilt. |
| Voer speciale invoer- of navigatieafhandeling uit op een besturingselement. U wilt bijvoorbeeld dat het gebruik van pijltoetsen in het lijstbeheer het geselecteerde item wijzigt. | Overschrijf ProcessDialogKey |
| 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. | Overschrijf IsInputChar. |
| Voer speciale invoer- of navigatieafhandeling uit tijdens een KeyPress-evenement. Bij een lijstbesturingselement wordt er, door de R-toets ingedrukt te houden, bijvoorbeeld overgeslagen tussen items die beginnen met de letter r. | Overschrijf ProcessDialogChar |
| Aangepaste nemonische verwerking uitvoeren; U wilt bijvoorbeeld mnemonics afhandelen op door de eigenaar getekende knoppen in een werkbalk. | Overschrijf ProcessMnemonic. |
Zie ook
.NET Desktop feedback