Strings vergleichen mit Label und RichBox

  • VB.NET

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Strings vergleichen mit Label und RichBox

    Hallo Liebe Community,

    Ich habe ein Label und eine TextBox. Nun möchte ich das der user in der TextBox das tippen soll was im Label steht vergleichen. Also immer sofort wenn der Benutzer eine eingabe macht, also im Label steht "Hallo" und der Anwender tippt ein "Hallöö" das dieser fehler irgendwie z.B unterstichen oder Farblich anders hervorgehoben wird.

    Ich habe über Google schon folgenden Code gesehen :

    Quellcode

    1. Private Sub Text1_Change()
    2. If Text1 <> Mid(Label1, 1, Len(Text1)) Then
    3. MsgBox "Sie haben sich vertippt"
    4. Text1.SelStart = Len(Text1) - 1
    5. Text1.SelLength = 1
    6. End If
    7. End Sub


    Der Code ist jedoch für VB6 und ich arbeitete für VB2010.Net
    Ja, das ist logisch, da der Text jedes mal überprüft wird. Nimm das LostFocus-Event, das ist da glaub ich besser. Du brauchst dafür dann ne RichTextBox, mit der Du das markieren kannst.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Soo... Habe jetzt die TextBox mal in eine RichBox verwandelt, das LostFocus-Event ausgewählt. Nun muss ich ja noch Coden das die Fehler Makiert werden.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „nb1999“ ()

    Nein, wohl weniger. Da helfen auf jeden Fall die Funktionen der String-Klasse. Wobei die Idee mit dem Speichern in einem String Blödsinn ist, dafür gibt es Collections (List(Of String)), in der kannst Du das jeweils speichern und dann durchiterieren.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    So könnte es gehen, jeden Buchstaben einzeln vergleichen und somit auch die Richtigkeit seiner Position .

    Richtig = Color Green
    Falsch = Color Rot
    Überlänge = Color Fuchsia
    +
    Überlänge --- zu kurz -- als Text hinweiß .

    EDIT :

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. If Label1.Text.Length > RichTextBox1.TextLength Then
    3. For i As Integer = 0 To RichTextBox1.TextLength - 1
    4. If Not RichTextBox1.Text.Substring(i, 1) = Label1.Text.Substring(i, 1) Then
    5. RichTextBox1.Select(i, 1)
    6. RichTextBox1.SelectionColor = Color.Red
    7. Else
    8. RichTextBox1.Select(i, 1)
    9. RichTextBox1.SelectionColor = Color.Green
    10. End If
    11. Next
    12. Dim Zu_Kurtz As String = CStr(Label1.Text.Length - RichTextBox1.TextLength)
    13. MsgBox("Der eingegebene Text ist " & Zu_Kurtz & " Zeichen kürtzer als die Vorgabe !", MsgBoxStyle.Information, "Info")
    14. ElseIf Label1.Text.Length < RichTextBox1.TextLength Then
    15. For i As Integer = 0 To Label1.Text.Length - 1
    16. If Not RichTextBox1.Text.Substring(i, 1) = Label1.Text.Substring(i, 1) Then
    17. RichTextBox1.Select(i, 1)
    18. RichTextBox1.SelectionColor = Color.Red
    19. RichTextBox1.Select(Label1.Text.Length, RichTextBox1.TextLength)
    20. RichTextBox1.SelectionColor = Color.Fuchsia
    21. Else
    22. RichTextBox1.Select(i, 1)
    23. RichTextBox1.SelectionColor = Color.Green
    24. RichTextBox1.Select(Label1.Text.Length, RichTextBox1.TextLength)
    25. RichTextBox1.SelectionColor = Color.Red
    26. End If
    27. Next
    28. Dim Überlänge As String = CStr(RichTextBox1.TextLength - Label1.Text.Length)
    29. MsgBox("Der eingegebene Text ist " & Überlänge & " Zeichen länger als die Vorgabe !", MsgBoxStyle.Information, "Info")
    30. ElseIf Label1.Text.Length = RichTextBox1.TextLength Then
    31. For i As Integer = 0 To RichTextBox1.TextLength - 1
    32. If Not RichTextBox1.Text.Substring(i, 1) = Label1.Text.Substring(i, 1) Then
    33. RichTextBox1.Select(i, 1)
    34. RichTextBox1.SelectionColor = Color.Fuchsia
    35. Else
    36. RichTextBox1.Select(i, 1)
    37. RichTextBox1.SelectionColor = Color.Green
    38. End If
    39. Next
    40. End If
    41. End Sub


    Wobei ich auch bei etwas angekommen währe , was ich nicht weis (( Das beenden der Selektion beim weiterschreiben ))

    Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „TVX“ ()

    TVX schrieb:

    Das griegen ma auch noch in Griff , bin aber noch am schaffe - sonst grieg ich mägger Ägger :D


    Arbeit geht vor !
    Finde es trotzdem toll das einem hier sachlich geholfen wird. In vielen anderen Foren bekommt man noch Freche Antworten dazu :)
    Versuch 2 - Fehlerhafte Worte Rot setzen ...

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Dim Wortliste1 As New List(Of String)
    4. Dim Wortliste2 As New List(Of String)
    5. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    6. Dim Text1 As String = Label1.Text.ToString
    7. Dim split1 As String() = Text1.Split(New [Char]() {" "c, ","c, "."c, ":"c, CChar(vbTab)})
    8. Dim Text2 As String = RichTextBox1.Text.ToString
    9. Dim split2 As String() = Text2.Split(New [Char]() {" "c, ","c, "."c, ":"c, CChar(vbTab)})
    10. For Each Liste1 As String In split1
    11. If Liste1.Trim() <> "" Then
    12. Wortliste1.Add(Liste1)
    13. End If
    14. Next
    15. For Each Liste2 As String In split2
    16. If Liste2.Trim() <> "" Then
    17. Wortliste2.Add(Liste2)
    18. End If
    19. Next
    20. Dim Fehlerliste = Wortliste2.Except(Wortliste1)
    21. For Each Fehlerhaftes_Wort As String In Fehlerliste
    22. For Each line In RichTextBox1.Lines
    23. Dim pos As Integer = line.IndexOf(Fehlerhaftes_Wort)
    24. RichTextBox1.Select(pos, Fehlerhaftes_Wort.Length)
    25. RichTextBox1.SelectionColor = Color.Red
    26. Next
    27. Next
    28. End Sub
    29. End Class​