Laatst getypte woord van richtextbox

Status
Niet open voor verdere reacties.

Victorr99

Gebruiker
Lid geworden
2 jun 2015
Berichten
83
Beste Helpmijers,

Ik ben opzoek naar de code om het laatst getypte woord te krijgen van een richtextbox.
Na veel dingen uitgeprobeerd te hebben stel ik deze vraag toch maar eens hier.
Stel ik typ de text "Hallo mensen", en ik typ tussen ''hallo'' en ''mensen'': ''beste''.
Hoe krijg ik dan het woord dat als laatste getypt is, in dit geval dus "beste"?

Alvast bedankt.

Mvg, Victor
 
misschien dat dit je verder helpt

ik kijk waar je cursor is, en pak de text (run) van dat punt naar links (backward)
dan krijg je alle text in de run dus split je de helezin op spaties en pak je het laatste woord of letter
als er een komma achterstaat krijg je deze dus ook, als je dit niet wilt kun je deze eruit knippen met een replace bijvoorbeeld (geld voor meer characters zoals . , : ; ! ? etc)
zodra je _lastWord een waarde geeft kun je ook dit woord in je statusbalk zetten of wat je er dan ook mee wilt doen

Code:
Private _lastWord As String = String.Empty

Private Sub InputOnTextChanged(sender As Object, e As TextChangedEventArgs)
    Dim currentPosition = txtInput.CaretPosition
    Dim textInRun = currentPosition.GetTextInRun(LogicalDirection.Backward)

    If textInRun.Contains(" "C) Then
        textInRun = textInRun.Trim().Split(" "C).Last().Trim()
    End If

    If Not String.IsNullOrWhiteSpace(textInRun) Then
        _lastWord = textInRun
    End If
End Sub
 
@Bloodshed ik denk dat Victor niet bedoelt het laatste woord in een zin, maar het laatst ingevoerde woord. En dat kan dus ook ergens midden in een zin zijn tussengevoegd.
Mijn kennis van VB.net is helaas nog niet zo groot dat ik weet of en hoe het te doen is, maar de enige manier om te achterhalen wat het laatst is ingevoerd is is volgens mij door op een of andere manier het geheugen uit te lezen waar de undo data wordt opgeslagen
 
Hij neem ook het laatste woord voor de cursor, dus als je 'beste' tussen twee woorden zet blijft dat het laatste woord voor de cursor tot je weer ergens anders typt.
 
Ik bedoel inderdaad het laatst ingevoerde woord in een zin.
De code van Bloodshed werkt bij mij niet omdat 'CaretPosition' bij mij niet werkt.
Ik gebruik .NET Framework 4.6 dus volgens Microsoft zou hij het bij moeten doen. Waarom hij bij mij niet werkt weet ik niet...
Bedankt voor de reacties trouwens.
 
Ah, ik zie het al.
Je hebt een WinForms project, ik gebruik een WPF project.

Ik heb gebruik al jaren geen winforms meer, dus zou ik even moeten proberen.


edit:

je kunt de SelectionStart property gebruiken, dit geeft je de index waar de caret staat (als je 'hallo' typt staat hij bijvoorbeeld op index 5 (klaar om het 6e character in te voeren)
als je de tekst vanaf het begin tot dit punt pakt heb je dus alle tekst tot aan de caret en is de rest zo ongeveer wel hetzelfde als in het voorbeeldje denk ik.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan