I min artikel, The ArrowKeyNav Routine, presenterade jag en Sub som du kan använda för att åsidosätta standardhanteringen av upp- och nedpiltangenterna på ett kontinuerligt formulär. Problemet med rutinen som jag presenterade den är att du måste anropa den från varje kontroll där du vill åsidosätta piltangentens funktionalitet.
Så här kan det se ut i en formulärmodul:
Private Sub cbSupplierID_KeyDown(KeyCode As Integer, Shift As Integer)
ArrowKeyNav KeyCode, Shift
End Sub
Private Sub chkDiscontinued_KeyDown(KeyCode As Integer, Shift As Integer)
ArrowKeyNav KeyCode, Shift
End Sub
Private Sub tbID_KeyDown(KeyCode As Integer, Shift As Integer)
ArrowKeyNav KeyCode, Shift
End Sub
Private Sub tbListPrice_KeyDown(KeyCode As Integer, Shift As Integer)
ArrowKeyNav KeyCode, Shift
End Sub
Private Sub tbProductCode_KeyDown(KeyCode As Integer, Shift As Integer)
ArrowKeyNav vbKeyDown, Shift
End Sub
Private Sub tbProductName_KeyDown(KeyCode As Integer, Shift As Integer)
ArrowKeyNav KeyCode, Shift
End Sub
Det finns ett par sätt att minska mängden boilerplate-kod vi behöver i den här situationen, men vi kommer att lägga det åt sidan för den här artikelns syften. Så, för argumentets skull, låt oss bara anta att det inte finns något sätt att minska mängden kod. Med tanke på den begränsningen, hur kan vi öka läsbarheten för ovanstående kod?
Sätta ihop kodrader med kolontecknet
Vi kan sammanfoga flera kodrader med hjälp av kolontecknet (:
).
används som ett terminalelement i den syntaktiska grammatiken för att namnge token som fungerar som en "slut på uttalandet"-markör. I allmänhet markeras slutet av påståendet med antingen eller kolontecken .
Förbättra läsbarheten genom att sammanfoga rader
Denna teknik är något du måste använda med försiktighet. Men om den används på ett klokt sätt kan det öka läsbarheten för din kod.
I exempelkoden ovan anropar varje Sub samma exakta kod:
ArrowKeyNav KeyCode, Shift
Det är faktiskt inte sant. Om du tittar noga kommer du att se att tbProductCode_KeyDown()
rutinen skickar vbKeyDown
istället för KeyCode
som första argument.
Denna skillnad är dock lätt att missa med standard VBA-formatering:
Få fel kod att se fel ut
Om vi sammanfogar raderna med kolon – och justerar blanktecken så att alla våra anrop till ArrowKeyNav
är vänsterjusterade – då framträder inkonsekvensen som smälter in ovan som en öm tumme i koden nedan:
När det ses i sammanhanget med normala funktioner och subrutiner, skiljer sig vårt block av boilerplate-kod tydligt från varandra. Denna distinktion hjälper till att öka signal/brusförhållandet för vår kod: