WPF Richtextbox prüfen ob Zeichen unter Cursor bestimmte Formatierung hat

  • WPF

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Translating-IT.

    WPF Richtextbox prüfen ob Zeichen unter Cursor bestimmte Formatierung hat

    Hi,

    Ich habe folgenden Code, um nach einem Linksklick einen String zwischen bestimmten Zeichen an der Cursorposition zu finden:

    VB.NET-Quellcode

    1. tp_start = rtb_targettext.CaretPosition
    2. tp_end = rtb_targettext.CaretPosition
    3. Dim stringBeforeCaret As String = tp_start.GetTextInRun(LogicalDirection.Backward)
    4. Dim stringAfterCaret As String = tp_start.GetTextInRun(LogicalDirection.Forward)
    5. Dim countToMoveLeft As Integer = 0
    6. Dim countToMoveRight As Integer = 0
    7. Dim boo_trigger As Boolean = False
    8. For i As Integer = stringBeforeCaret.Length - 1 To 0 Step -1
    9. If stringBeforeCaret(i) <> "|" Then
    10. countToMoveLeft += 1
    11. ElseIf stringBeforeCaret(i) = "|" Then
    12. countToMoveLeft += 1
    13. boo_trigger = True
    14. ElseIf stringBeforeCaret(i) = "+" AndAlso boo_trigger = True Then
    15. boo_trigger = False
    16. Exit For
    17. ElseIf stringBeforeCaret(i) <> "+" AndAlso boo_trigger = True Then
    18. boo_trigger = False
    19. countToMoveLeft += 1
    20. End If
    21. Next
    22. For i As Integer = 0 To stringAfterCaret.Length - 1
    23. If stringAfterCaret(i) <> "|" Then
    24. countToMoveRight += 1
    25. ElseIf stringAfterCaret(i) = "|" Then
    26. countToMoveRight += 1
    27. boo_trigger = True
    28. ElseIf stringAfterCaret(i) = "+" AndAlso boo_trigger = True Then
    29. boo_trigger = False
    30. Exit For
    31. ElseIf stringAfterCaret(i) <> "+" AndAlso boo_trigger = True Then
    32. boo_trigger = False
    33. countToMoveRight += 1
    34. End If
    35. Next


    Dies funktioniert auch recht gut, ist aber etwas Fehleranfällig und ich muss dafür auch extra Zeichen in den Text einfügen, die eigentlich nicht reingehören.

    Besser wäre zu prüfen, ob die Zeichenfolge an der Cursorposition eine bestimmte Formatierung hat. Wie in meinem Code oben solange links und rechts weitersuchen, bis die Formatierung nicht mehr gefunden wird.

    Geht das irgendwie?

    Edit: Oder kann ich auch hingehen und die Position abfragen und andererseits die Positionen (Ranges) einer bestimmten Formatierung durchlaufen lassen, wenn diese übereinstimmen, dann Aktion ausführen lassen?

    LG,
    Pascal
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Translating-IT“ ()

    das hier ist nun auch gelöst:

    der 2. Gedanke war der Richtige. Ich frage alle Textranges von bestimmten Wörtern ab, wenn sie formatiert werden und vergleiche die Textranges und CaretPosition dann über TextPointer:

    VB.NET-Quellcode

    1. 'im Arraydurchlauf:
    2. Dim range as TextRange = gespeicherteTextRange(i)
    3. tp_start = rtb_targettext.CaretPosition
    4. tp_end = rtb_targettext.CaretPosition
    5. If range.Start.GetOffsetToPosition(tp_start) >= 0 AndAlso range.End.GetOffsetToPosition(tp_end) <= 0 Then
    6. MessageBox.Show("gefunden!")
    7. 'Arraydurchlauf verlassen
    8. End If
    :!: Leider hab ich nicht immer Zeit zum Programmieren, da es eher ein Hobby ist. Falls ich mal im Forum ne Frage stelle und länger nicht antworte, nicht böse sein: Ich bin dann entweder beruflich oder mit der Familie zu sehr eingespannt oder einfach zu müde. Das kann erfahrungsgemäß auch mal über Wochen dauern, aber ich melde mich immer und setze die Frage ggf. auf beantwortet.