15. maj 2002 - 21:46Der er
10 kommentarer og 1 løsning
Override keydown
Hej alle. Møj simpelt spm.
Jeg har en textbox hvor jeg opfanger tryk på tab tasten. Jeg skriver så noget text til tekstboksen, men herefter ønsker jeg ikke at der skal tilføjes en tab til teksten. Så hvordan gør jeg således der ikke bliver trykket tab efter jeg har opfanget trykket? Jeg ville gætte på noget med Return True men det virker ik.
Jo, det er egentligt lidt svært at læse nu hvor jeg selv ser på det :). Mit tekstfelts keydown event ser således ud:
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 9 Then Text1.SelLength = 1 Text1.SelText = " " End If End Sub
Det gør at hver gang jeg trykker tab bliver der tilføjet to mellemrum, men herefter bliver der også indsat tab i feltet, jeg vil kun have mine to mellemrum.
Det er ikke fordi den springer videre til næste objekt, jeg har slået tab stop (tror jeg nok den hedder), det er fordi den indsætter tab i tekstboksen (altså noget der svarer til omkring 10 mellemrum). Hvordan kan jeg sørge for at den kun indsætter min tekst, og så bare glemmer at brugeren trykkede på tab?
Hvis du har tabstop=False på alle kontroller på formen (incl. textboxen), så indsætter den kun de to mellemrum. (i hvert fald hos mig). Men ellers prøv: Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 9 Then Text1.SelLength = 1 Text1.SelText = " " KeyCode = 0 End If End Sub
Hej, jeg har tabstop på alle kontroller, hvilket forhindrer at den skifter kontrol når der bliver trykket på tab. I stedet bliver tab nu indsat i tekstfeltet, altså ligesom når man trykker på tab i word, det er det jeg vil undgå. KeyCode = 0 hjælper desværre ikke.
Det forstår jeg ikke! Koden virker fint hos mig med eller uden KeyCode=0, og også med eller uden KeyPreview. -Forudsat alle kontroller har TabStop=False. ????????? Hvis jeg helt fjerner al kode, og sætter alle TabStop=False, så har Tab overhovedet ingen effekt!
Jeg opdager nu at problemet opstår, når MultiLine = True! Hvis du kører uden multiline, så virker det, ellers ikke. Desværre kan denne property ikke ændres i runtime, så du må nok leve med det.
Hvis du kan bruge KeyPress eventet i stedet for, virker følgende:
Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 9 Then Text1.SelLength = 1 Text1.SelText = " " KeyAscii = 0 End If End Sub
/tjacob
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.