Spellcheck fehler errechnen

  • VB.NET

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von VBHunter.

    Spellcheck fehler errechnen

    Hi Leute,

    ich komme nicht mehr weiter und hoffe Ihr könnt helfen :/

    Ich habe eine Richtextbox die mit der Spellcheck funktion ausgestattet ist. Ich will das mir die Anzahl der Unterstrichenen(Fehler) Wörter angezeigt wird, nur wie bekomme ich die unterstrichenen Wörter in mein count ?(

    Hier mal mein Code:

    VB.NET-Quellcode

    1. Private WithEvents RichtextBox1 As New RichtextBoxSpellCheck
    2. Dim count As Integer = 0
    3. Public Sub New()
    4. InitializeComponent()
    5. Panel1.Controls.Add(RichtextBox1.ElementHost)
    6. End Sub
    7. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    8. Label2.Text = "Fehler: " & count
    9. RichtextBox1.SpellCheck.IsEnabled = True
    10. End Sub
    11. Public NotInheritable Class RichtextBoxSpellCheck
    12. Inherits System.Windows.Controls.RichTextBox
    13. Public Sub New()
    14. Dim eh As ElementHost = New ElementHost
    15. With eh
    16. .Child = Me
    17. .Dock = DockStyle.Fill
    18. End With
    19. Me.ElementHost = eh
    20. End Sub
    21. Private _elementhost As ElementHost
    22. Public Property ElementHost() As ElementHost
    23. Get
    24. Return Me._elementhost
    25. End Get
    26. Set(ByVal value As ElementHost)
    27. Me._elementhost = value
    28. End Set
    29. End Property
    30. End Class


    Hoffe ihr könnt mir weiterhelfen ;(
    Hallo @VBHunter

    Das habe ich dir in deinem anderen Thread bereits erleutert.
    Textboxtext vergleichen...
    Du musst nur noch die Begriffe in der MSDN eingeben und siehe da: docs.microsoft.com/en-us/dotne…dex?view=netframework-4.8

    Anhand der Informationen kannst du dir deine Hilfmethoden bauen die dir die Anzahl der Fehler und auch die genauen Worte zurückgeben.
    Auf wie man eigene "Wörterbücher" angiebt ist hier beschrieben.

    Was brauchst du noch an Infos?
    Was genau ist unklar?

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Danke für deine Antwort @Nofear23m :rolleyes:

    Ja das hab ich schon versucht bin da aber auch nicht weiter gekommen :/

    Wie kann ich z.b. GetSpellingErrorLength aufrufen ....

    VB.NET-Quellcode

    1. Richtextbox1.[hier die Methoden]


    kommt leider kein GetSpellingErrorLength ... nur GetSpellingError oder GetSpellingErrorRange :S
    OK, und dann gibt es auch noch GetNextSpellingErrorPosition. Und mit diesen Methoden solltest du doch an alle Infos kommen oder?

    Welche Infos vermisst du denn?
    Du kennst den Objektexplorer? Auch die Intellisense hilft dir ja ungemein. Ein wenig nachsehen und nachlesen musst du schon, nur so lernt man.
    Schau dir die Methoden mal genauer an und überlege dir eine "Strategie" wie du nun die Fehler auslesen könntest.

    Ich bin sicher du kommst drauf wenn du ein wenig grübelst.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Eigendlich so oder? RichtextBox1.GetNextSpellingErrorPosition(position, direction)

    :huh: Ist kniffelig, hab mich da jetzt belesen und das ist schon die richtige Methode aber steige nicht hinter was er für ein Textpointer will ... müsste doch die Richtextbox sein oder?

    und direction = 1 oder? um Forward 1 Vorwärts oder von links nach rechts.

    also RichtextBox1.GetNextSpellingErrorPosition(Richtextbox1, 1)

    sorry das ich mich so anstelle :/
    Hallo

    Im Grunde ist es nicht so schwer, du musst dir nur die Wörter "zusammensuchen". Ich habe das gerade mit einer TextBox und WPF getestet.
    Du hast eine mächtige Waffe in der Hand. die IDE Visual Studio und deren Intellisense.

    GetSpellingError gibt dir einen SpellError zurück und verlangt als Parameter einen CharIndex, also die Position der Zeichenfolge wo er nach einem Fehler suchen soll.
    OK, hast du dir die Klasse SpellError schon angesehen? Da bekommst du einiges an Eigenschaften geboten wie z.b. ausbesserungen, aber im Moment brauchen wir die gar nicht.

    Gibt es an der Position KEINE Fehler gibt die Funktion Nothing zurück. Das können wir also schön Abfragen.
    Gibt es an der Position aber einen Fehler so bekommst du ein SpellError. Top.
    Als nächstes müssen wir wissen wieviele Zeichen der aktuelle Error lang ist, sonst würden wir den Fehler ja mehrfach zählen. Wenn wir in einer Schleife arbeiten können wir somit dann auch den Schleifenzähler hochzählen.
    An die Länge kommen wir mit GetSpellingErrorLength welcher wieder die Startposition haben möchte. Richtig, auch hier können wir den Schleifenzähler verwenden.

    Und das ganze kombiniert, in eine Schleife gepackt und als Funktion aufbereitet sieht das dann wie folgt aus:

    VB.NET-Quellcode

    1. Private Function GetAllSpellingErrors(txt As TextBox) As List(Of String)
    2. Dim retList As List(Of String) = New List(Of String)
    3. For i As Integer = 1 To txt.Text.Length - 2
    4. Dim spellError As SpellingError = txt.GetSpellingError(i)
    5. If spellError IsNot Nothing Then
    6. Dim errorLength = txt.GetSpellingErrorLength(i)
    7. retList.Add(txt.Text.Substring(i, errorLength))
    8. i += errorLength
    9. End If
    10. Next
    11. Return retList
    12. End Function


    Ein Aufruf kann das so aussehen:

    VB.NET-Quellcode

    1. MessageBox.Show($"Folgende Fehler erkannt{Environment.NewLine}{String.Join(",", GetAllSpellingErrors(txtSpellCheck))}")




    Ist nur ein wenig logisches denken und die Verwendung der IDE. Die richtigen Funktionsnamen hattest du ja bereits gegeben.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Danke Sascha das ist Klasse wie du es erklärt hast besser geht's nicht TOP :)

    Integer muss aber auf 0 sein richtig? Wel sonst zeigt er ja erst in der MessageBox ab dem 2 Buchstaben an. ;)

    Wie finde ich eigentlich das Spellcheck Wörterbuch? Wo alle Wörter stehen ... Komischerweise korrigiert er nicht richtig z.b. Ich bin Glücklich.

    Glücklich schreibt man klein also eigendlich ein Fehler

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

    VBHunter schrieb:

    Integer muss aber auf 0 sein richtig?

    Hab jetzt nicht genau nachgesehen, aber ich denke nicht. Sonst wirst du ja bei txt.GetSpellingError(i) nen Fehler bekommen da glaube ich der CarIndex 0 ungültig ist.
    Probieren geht über studieren. In der Zeit in der du den Satz geschrieben hast hättest du es probieren auch schon können oder?

    VBHunter schrieb:

    Wie finde ich eigentlich das Spellcheck Wörterbuch? Wo alle Wörter stehen ...

    Das habe ich dir in dem anderen Thread bereits erleutert. Du musst hald schon lesen auch. Ich glaube nicht das du an das "Wörterbuch" herankommst, du kannst aber eigene implementieren.
    Wie es da mit Grammatik aussieht weis ich nicht. Immerhin kann "glücklich" ja auch am Satzanfang stehen und wäre somit richtig. Was du aber machen kannst ist das du mehrere "Wörterbücher" anlegst (für jede - ich nenns jetzt mal Session - ein Wörterbuch). So bist du denke ich flexibel genug.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Nofear23m schrieb:

    Hab jetzt nicht genau nachgesehen, aber ich denke nicht. Sonst wirst du ja bei txt.GetSpellingError(i) nen Fehler bekommen da glaube ich der CarIndex 0 ungültig ist.
    Probieren geht über studieren. In der Zeit in der du den Satz geschrieben hast hättest du es probieren auch schon können oder?


    Ja, genau das hatte ich schon getan... habs ausprobiert, war nur am Tag wo ich die letzte Nachricht schrieb unterwegs und konnte es nicht Testen.

    Habe jetzt also Integer = 0 und hinter txt.Text.Length - 2 hab ich die "-2" weg gemacht und es läuft super, vorher hatte er wenn er gezeigt hat: Folgende Fehler erkannt alloo (statt Halloo)
    Ungültig ist der Char bei MINUS dann ging es nicht mehr und zeigte Fehler.

    Jedenfalls besten dank, so läuft das jetzt super ich Rufe jetzt die Funktion auf und lasse die unterstrichenen Wörter zählen und im Label ausgeben. :D

    Nofear23m schrieb:

    Ich glaube nicht das du an das "Wörterbuch" herankommst, du kannst aber eigene implementieren.


    Warum kömmt man da nicht ran ist das nicht im Framework gespeichert oder im System von Windows?
    Er muss die wörter ja irgendwoher nehmen :huh: .... dachte erst an C:\Users\*Benutzer*\AppData\Roaming\Microsoft\Spelling\de-DE aber die datein sind leer.

    Eine zusätzliche abfrage klingt aber sehr kompliziert, es muss doch ein Regelwerg für die Rechtschreibung geben und es so umsetzten können oder?

    Das stimmt auch wohl wenn "Glücklich" am anfang steht ist es groß ... kann man nicht sowas ähnliches machen wie:

    - Wenn nach Punkt oder am Anfang dann GROß
    - Wenn komma dann KLEIN

    dazu müsste ich aber auch wieder jedes einzelne Wort abfragen oder? Hatte auch schon überlegt mir eine eigene Wortliste zu erstellen, aber die Deutsche Sprache hat so viele Wörter :D wo bekommt man jedes her und dann noch als Nomen, Verb und Adjektiv X/

    Hast du noch ein anderen Ansazu oder verbesserung dazu?

    VBHunter schrieb:

    Hatte auch schon überlegt mir eine eigene Wortliste zu erstellen, aber die Deutsche Sprache hat so viele Wörter

    Wenn ich das richtig verstanden habe willst du ja so ne Art Prüfung-App machen wo man einen Satz richtig schreiben muss oder? Sag wenn ich da falsch liege.

    Wenn dem so ist dann weist du ja welcher Satz die "aktuelle Lesson" beinhaltet. Da generierst du einfach für jede Lesson dein Wörterbuch mit diesen paar Wörtern.
    Ansonsten wäre toll wenn du mal verraten würdest was genau du vor hast.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Nofear23m schrieb:

    Wenn ich das richtig verstanden habe willst du ja so ne Art Prüfung-App machen wo man einen Satz richtig schreiben muss oder? Sag wenn ich da falsch liege.


    Stimmt, diese Idee ist nicht schlecht, da der Benutzer ja genau den vorgegebenen Satz schreiben soll.

    Okay dann würde ich es so machen:

    Im Ordner eine Txt erstellen mit den vorgaben: (Beispieltext) Diesen text soll der Benutzer 100 % so nachschreiben weicht ein Wort (Buchstabe) davon ab wird das Wort unterstrichen und es entsteht ein Fehlerpunkt.

    VB.NET-Quellcode

    1. Weit hinten, hinter den Wortbergen, fern der Länder Vokalien und
    2. Konsonantien leben die Blindtexte. Abgeschieden wohnen Sie in
    3. Buchstabhausen an der Küste des Semantik, eines großen Sprachozeans. Ein
    4. kleines Bächlein namens Duden fließt durch ihren Ort und versorgt sie
    5. mit den nötigen Regelialien.


    VB.NET-Quellcode

    1. Dim correct As Boolean = False
    2. Dim rtb As New RichTextBox
    3. rtb.Text = IO.File.ReadAllText("C:\Users\*Benutzer*\Desktop\TextvorgabeLesson1.txt")
    4. For Each line As String In rtb.Lines()
    5. If TextBox1.Text = line Then
    6. correct = True
    7. MessageBox.Show("Alles ist richtiggeschrieben!", "Super", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) 'als beispiel
    8. Exit Sub
    9. Else
    10. End If
    11. Next
    12. If correct = False Then
    13. MessageBox.Show("Du hast YX Wörter nicht richtiggeschrieben!", "Schade", MessageBoxButtons.OK, MessageBoxIcon.Error) 'als beispiel
    14. End If


    wie kann ich jetzt machen das er jedes einzelne Wort überprüft auf übereinstimmung und wenn nicht das betroffne Wort makiert und bei klick auf der rechten Maustaste mir MEIN vorgegebenes Wort als vorschlag gibt?

    Sorry @Nofear23m ich habe vorstellungen wa ! :D

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

    Also ich habe das gerade mal getestet und wie es aussieht klappt das mit dem "eigenen Wörterbuch" auch super, inkl. Korrekturvorschlag über das Contextmenü jedoch bleibt das "normale" Wörterbuch erhalten.
    Somit hast du das Problem das wenn jemand Weit hinten, hinter den Autos schreibt hier das Wort Autos nicht unterwellt wird. Ich finde im Moment auch keine Möglichkeit das Originale ausser Kraft zu setzen da dies von OS geholt wird. Somit bleibt das Problem mit z.b. dem Groß-Kleinschreiben. Doof, ist aber so.

    Wenn du volle Kontrolle haben willst musst du wohl pder übel zu einer eigenen Lösung greifen. Also eine Klasse mit einem eigenen Control. Ist jetzt auch nicht sehr schwer, aber ein wenig Denkarbeit wirds wohl schon wenns denn performant auch werden soll.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Danke @Nofear23m, aber ginge das nicht irgendwie wenn man es so aufbaut?

    - Fertigen Text in einer .Txt (wie jetzt im letzten beispiel)
    - er vergleicht (ohne Contolls bzw. Spelling) jedes Wort so wie in der .Txt
    - ist das Wort richtig dann nächstes prüfen
    - ist das Wort falsch dann dies unterstreichen
    - bei Klick auf das unterstrichene Wort im MouseClick-Event vorschlag des falschen Wotes aus der .Txt
    - Klickt man jetzt auf die Korrektur wird das Wort in der Textbox oder Richtextbox übernommen.

    ich glaube so müsste es ablaufen oder?

    hast du verbesserungen oder ansätze, ich hänge schon bei Punkt 2. Denke mal eine schleife oder?
    Nagut das vergleichen jedes Wortes sollte ja nicht das Problem sein. Wobei es darauf ankommt ob auch die Satzzeichen korrekt sein müssen, denn dann wohl eher nicht Wort für Wort sondern Zeichen für Zeichen.

    Das musst du selbst wissen wie genau verglichen werden musst.
    Wichtiger wäre mal ein Control welches das unterstreichen unterstützt, denn das musst du ja dann selbst regeln. Das Contextmenü ist dann auch wieder knifflig, da anhand der Mausposition das aktuelle Wort erkannt werden muss. Danach muss erkannt werden welches Wort denn gesucht ist.

    Überlege dir für jeden Punkt wie du es angehen willst und versuche es dann umzusetzen. Google hilft hier sicher, ein wenig denken musst du natürlich auch.

    Wird sicher nicht einfach. Aber was fertiges wird dir hier niemand servieren.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Nofear23m schrieb:

    Aber was fertiges wird dir hier niemand servieren.


    Das verlange ich auch garnicht, aber ansätze sind immer gut ^^ ....

    Aber ich benötige schon wieder Hilfe, habe mich jetzt mal ran gemacht und was gebastelt. Alles läuft super, nur wie kann ich es machen, wenn man ein , oder . oder ein anderes Zeichen vergisst, das an der Stelle ROT unterstreicht also so "Der Text ist zuende "

    Wie ist es aufgebaut:

    Ich habe zwei Richtextboxen die als Sting verglichen werden, im Rechten String ist der Originaltext (Versteckt, wird erst sichtbar wenn der User auf kontrolieren klickt) und in die Linke RTB muss der Benutzer den gesagten Satz eingeben ....

    VB.NET-Quellcode

    1. Dim OriginalText As New List(Of String)
    2. Dim PruefText As New List(Of String)


    Im Load als TEST:

    VB.NET-Quellcode

    1. RTB_OrgText.Text = "Heute ist es sehr warm und heiß, wir hoffen es wird schnell wieder kalt."


    Im Klick:

    VB.NET-Quellcode

    1. For Each line1 As String In RTB_OrgText.Lines
    2. Dim split1 As String() = line1.Split(New [Char]() {" "c, CChar(vbTab)})
    3. For Each Liste1 As String In split1
    4. If Liste1.Trim() <> "" Then
    5. OriginalText.Add(Liste1)
    6. End If
    7. Next
    8. Next
    9. For Each line2 As String In RTB_UserText.Lines
    10. Dim split2 As String() = line2.Split(New [Char]() {" "c, CChar(vbTab)})
    11. For Each Liste2 As String In split2
    12. If Liste2.Trim() <> "" Then
    13. PruefText.Add(Liste2)
    14. End If
    15. Next
    16. Next
    17. Dim Fehlerliste = PruefText.Except(OriginalText)
    18. For Each Highlight As String In Fehlerliste
    19. Dim matches As MatchCollection = Regex.Matches(RTB_UserText.Text.ToLower, Highlight.ToLower)
    20. For Each Match As Match In matches
    21. RTB_UserText.Select(Match.Index, Match.Length)
    22. RTB_UserText.SelectionColor = Color.Red
    23. Next
    24. Next


    Wäre super wenn es eine lösung für mein Problem gibt .... Danke im Vorraus für die Hilfe.

    So wie es ist Makiert er das Wort vor dem Punkt da der Punkt Quasi zum Wort gehört.

    VBHunter schrieb:

    Wäre super wenn es eine lösung für mein Problem gibt

    Ja, gibt es. Lesen!

    Nofear23m schrieb:

    Wobei es darauf ankommt ob auch die Satzzeichen korrekt sein müssen, denn dann wohl eher nicht Wort für Wort sondern Zeichen für Zeichen.


    Liest du meine Antworten nicht durch? Es ist ja klar, wenn alle Zeichen auf Ihre richtigkeit geprüft werden sollen dann musst du auch Zeichen für Zeichen prüfen.
    Wobei du hier auch eine gewisse Fehlerquote akzeptieren solltest. Kommt immer darauf an was du benötigst. Muss z.b. nach einem Beistrich ein Leerzeichen folgen oder nicht. Das musst du dann eben auch prüfen.

    Also musst du nun deine Prüfung nur dahingehend umbauen das jedes Zeichen geprüft wird. Fertich.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Nofear23m schrieb:

    Liest du meine Antworten nicht durch?


    Doch tu ich, aber da liegt ja das Problem er nimmt die ganzen Wörter inkl. Komma oder Punkt "Heute ist es sehr warm und heiß, wir hoffen es wird schnell wieder kalt." in diesen Fall "heiß,"

    Also stell ich die Frage mal so, wie bekomm ich hin das er Zeichen für Zeichen checkt und nicht Wort für Wort

    Nofear23m schrieb:

    nach einem Beistrich ein Leerzeichen folgen oder nicht.


    Genau, aber es sind einfache Texte wo nur Komma und Punkt vorkommen .... Nur vergisst dieser User hinter "heiß" ein Komma zu setzen soll es so dargestellt werden "heiß "

    :/

    VBHunter schrieb:

    er nimmt die ganzen Wörter inkl. Komma oder Punkt

    OK, ich entnehme deiner Antwort das du den Code zum großteil per Copy&Paste übernommen hast richtig?

    Und das ist der Fehler den viele machen. Sie versuchen diesen nicht mal zu verstehen.

    Die Folgende Zeile: line1.Split(New [Char]() {" "c, CChar(vbTab)}) trennt den Text eben bei jedem Leerzeichen. da bei heiß, zwischen dem ß und dem , kein leerzeichen ist wird hier auch nicht getrennt und es gilt als ein Wort. Stichwort wäre hier wiedermal "Debuggen". Hättest du nach dieser Zeile mal einen Haltepunkt gesetzt und die Maus über line1 gesetzt hättest du es sofort gesehen.

    Ich habs dir zhur Anfangszeit hier im Forum schon mal gesagt, Debuggen und den Code verstehen ist extrem wichtig für die selbsthilfe. So sparst du extrem viel Zeit weil du innerhalb von Sekunden auf den Fehler kommst.
    Ich habs damals nur gut gemeint und das meine ich heute auch noch gut.

    OK, zurück zu deinem Problem, verwende .ToCharArray


    Ich will dich nicht entmutigen, aber auch wenn du Zeichen für Zeichen durchgehst wird es nicht einfach. Warum?
    Du kannst z.b. nicht einfach in einer Schleife Zeichen für Zeichen durchgehen und prüfen ob die Zeichen gleich sind.

    Beispiel: Heute ist es sehr heiß.
    Schreibt der User: Heut ist es sehr heiß. - würde in dem Fall ja aller ab dem fehlenden "e" als Falsch markiert werden da an der Position die Zeichen nicht mehr stimmen.

    Du musst das ganze also viel intelligenter gestallten. Das gilt für den Fall wenn du es Wortweise machst als auch für den Fall das du es Zeichen für Zeichen machst. Du musst dir (wenn du das wirklcih hinbekommen willst) einen guten Plan zurechtlegen was genau du machen willst. Das können wir dir nicht abnehmen. Ich weis, es juckt dich sicher in den Fingern ;) . Aber drauf los proggen ist hier glaube ich der falsche ansatz. Du brauchst wirklich einen Plan um alle Fälle abdecken zu können. Schreib dir das zusammen und versuche eine Prüfmethode zu entwickeln die das alles schafft. Im normalfall würde ich für sowas nun UnitTests empfehlen aber ich denke das wäre zu viel für dich. Du benötigst eine Methode die zwei Strings entgegennimmt und dir eine List(Of Irgendwas) ausspuckt in welche Fehler und evtl. Berichtigungen enthalten sind. Diese Methode musst du so weit ausbauen das diese deinen Anforderungen entspricht. Immer wieder daran Feilen und weiter verbessern. Wie ich schon geschrieben habe wir das nicht einfach, ist aber möglich.

    Ich gebe zu das dein Vorhaben schon wieder so kompliziert ist das es mich fast schon interessiert sowas mal zu versuchen, aber ich will dir ja auch nicht seine Arbeit abnehmen :whistling:
    Einfach ist aber glaube ich anders.

    Grüße
    Sascha

    EDIT: Ausser es ginge dir in diesm Fall nur darum das das Wort eh so getrennt bleiben kann wie es ist, aber das anstreichen soll sich nur anders verhalten.
    So das Quasi das ganze Wort inkl. dem Komma falsch ist aber nur der Beistrich rot markiert wird. Du siehst, du musst mal wirklich auch für dich selbst genau spezifizieren was benötigt wird und was in welchem Fall passieren soll.
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

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

    Nofear23m schrieb:

    Copy&Paste


    Na ja, ich habe gegoogelt und Vorschläge gefunden diese habe ich selber weiter überarbeitet. Man lernt ja nunmal von vorgegebenen Texten.

    Ja die stelle kam mir auch im sinn aber Line1 da dort die wörter ja Potioniert werden (bis zum nächsten Leerzeichen)

    Danke diese ToCharArry() ist schon mal ein super hinweis. Habe mich jetzt eine weile damit Beschäftigt aber bekomm es noch nicht richtig hin. TUT MIR LEID .... ;(

    Er zeigt mir jetzt die Zeichenanzahl und auf wunsch ja auch die Stellen bzw. was da steht an pos. 3-6 aber bekomme es nicht so umgebaut das er mir ein Leerzeichen setzt und es Rot makiert wenn es bei RTB1 fehlt...

    VB.NET-Quellcode

    1. Dim split1 As String = line1.ToCharArray()


    hab hin und her versucht in der Fehlerliste

    VB.NET-Quellcode

    1. Dim Fehlerliste = Prueftext.Except(OrginalText)
    2. For Each Highlight As String In Fehlerliste
    3. Dim matches As MatchCollection = Regex.Matches(RTB_UserText.Text.ToLower, Highlight.ToLower)
    4. Dim Zeichen As String = ","
    5. For Each Match As Match In matches
    6. If Match.ToString = Zeichen Then
    7. RTB_UserText.SelectionColor = Color.Red
    8. End If
    9. RTB_UserText.Select(Match.Index, Match.Length)
    10. RTB_UserText.SelectionColor = Color.Red
    11. counter += 1
    12. Next
    13. Next
    14. MessageBox.Show(counter.ToString())


    Nofear23m schrieb:

    Schreibt der User: Heut ist es sehr heiß. - würde in dem Fall ja aller ab dem fehlenden "e" als Falsch markiert werden da an der Position die Zeichen nicht mehr stimmen.


    Das ist ja kein Problem er soll ja trotzem nur die Wörter markieren, der User hat zum abgleich dann die Rechte RTB mit dem Originaltext. Nur halt bei dem Komma und Punkt soll statt das Wort Rot ein Leerzeichen hin was Rot unterstrichen ist.

    Sorry bin anstrengend :/

    VBHunter schrieb:

    TUT MIR LEID ....

    Mein Gott, muss es doch nicht. Ist schon was etwas spezielleres was du da vorhast.

    VBHunter schrieb:

    Das ist ja kein Problem er soll ja trotzem nur die Wörter markieren

    Das ist genau das wo du probleme bekommen wirst.

    OK, pass auf. Wir gehen das mal zusammen an.

    Trenne erstmal wie schon beschrieben, Daten vom Control. Das ist wichtig. Ob du nun Wortweise vergleichst oder Zeichen für Zeichen - ich weis echt nicht mehr was besser ist, das kommt auf die Aufgabenstellung an.
    Ich würde sagen, klären wir das mal oder?

    Also, ein paar Fragen:

    Willst du bei Fehlern auch über das Contextmenü Vorschläge anbieten?
    Wenn ja, wie soll das aussehen bei einem Kommafehler? Wenn "Hallo, ich bins" richtig ist und der User schreibt "Hallo ich bins". Soll dann "Hallo," vorgeschlagen werden oder ","?
    Es soll in solch einem Fall ja auch das ganze Wort unterstrichen werden oder? Denn das "unterstreichen" erfolgt ja in der TextBox wo der User schreibt und nicht in der mit dem Originaltext oder?
    Wenn das Komma Fehlt kannst du aber dieses auch nicht Unterstreichen da ja keines da ist, richtig? Also muss ja das Wort davor unterstrichen werden richtig?
    Selbes gilt bei fehlendem Satzzeichen wie Punkt, Rufzeichen, Fragezheichen usw. - oder auch bei "ich bin's" das "'".

    Beantworte bitte mal die Fragen, dann haben wir einen besseren "Plan" und sehen weiter.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##