selstart in keyup event

Status
Niet open voor verdere reacties.

Samsung6713

Gebruiker
Lid geworden
24 dec 2019
Berichten
209
Goedeavond,
ik heb een soort auto-aanvullen gemaakt voor in een tekstvak.

Daarvoor maak in onder andere gebruik van .selstart
Dit werkt prima, behalve als ik aan het einde van de tekst een spatie wil invoegen.

Ik verander de tekst in het keyup event, en zet daarna met .selstart de cursor op de juiste positie.

De selstartpositie in de code is wel juist, maar toch wordt de spatie er afgetrimt (je ziet het heel snel gebeuren)

Dit is de code

Code:
Private Sub werkzaamheden_KeyUp(KeyCode As Integer, Shift As Integer)

    Dim s As String
    s = Me.werkzaamheden.Text
    
    Dim i As Integer
    i = InStr(s, ">>")
        If i > 0 Then
            s = left(s, i - 1)
        End If
    i = Len(s)
    Dim sNew As String
    If Len(sKeyWordReplace) = 0 Then
        bNoAfterUpdateWerkzaamheden = True
        Me.werkzaamheden.Text = s
        bNoAfterUpdateWerkzaamheden = False
        Me.werkzaamheden.SelStart = i
        Exit Sub
    End If
    If i > Me.werkzaamheden.SelStart Then
        bNoAfterUpdateWerkzaamheden = True
        Me.werkzaamheden.Text = s
        bNoAfterUpdateWerkzaamheden = False
        Me.werkzaamheden.SelStart = i
        Exit Sub
    End If
    sNew = ">>" & DLookup("Keyword", "Autofill", Criteria:="Keyword Like '" & sKeyWordReplace & "*'")
    Debug.Print sNew
    If Len(sNew) = 2 Then
        bNoAfterUpdateWerkzaamheden = True
        Me.werkzaamheden.Text = s
        bNoAfterUpdateWerkzaamheden = False
        Me.werkzaamheden.SelStart = i
        Exit Sub
    End If
    
    s = s & sNew
    bNoAfterUpdateWerkzaamheden = True
    Me.werkzaamheden.Text = s
    bNoAfterUpdateWerkzaamheden = False
    Me.werkzaamheden.SelStart = i
End Sub

Het vervangen van het autoaanvullen gaat met tab en dat gebeurt natuurlijk in de keydown, wat overigens prima werkt.

Code:
Private Sub werkzaamheden_KeyDown(KeyCode As Integer, Shift As Integer)
    If Me.AllowEdits = False Then Exit Sub

    Select Case KeyCode
    Case 9
        Dim s As String
        s = Me.werkzaamheden.Text
        Dim i As Integer
        i = InStr(s, ">>")
        If i > 0 Then
            s = left(s, (i - Len(sKeyWordReplace)) - 1)
        End If
        If Len(sKeyWordReplace) <> 0 Then
            bNoAfterUpdateWerkzaamheden = True
            Me.werkzaamheden.Text = s & " " & DLookup("Keyword", "Autofill", Criteria:="Keyword Like '" & sKeyWordReplace & "*'")
            bNoAfterUpdateWerkzaamheden = False
            KeyCode = 0
            Exit Sub
        End If
    Case 65 To 90

         If Shift Then
             sKeyWordReplace = sKeyWordReplace & UCase(Chr(KeyCode))
         Else
             sKeyWordReplace = sKeyWordReplace & LCase(Chr(KeyCode))
         End If
    Case Else
        sKeyWordReplace = ""

    End Select
End Sub

Heeft iemand een oplossing?
 
Zo te zien heb je het zelf al opgelost, want dat is de status van de vraag :). Als dat niet zo is, plaats dan een voorbeeldje, want dit ga ik echt niet nabouwen….
 
Samsung6713


Misschien kan je dit ook nog gebruiken:

Code:
s = Me.werkzaamheden.Text & Space(2)

Dan hoef je ook geen spatie te tikken in veld werkzaamheden.


Gr. Cor
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan