Textboxtext vergleichen...

  • VB.NET

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

    Textboxtext vergleichen...

    Hi Leute,

    ich komme grad gedanklich nicht weiter und bräuchte einen rat, hinweise oder lösungen :/.

    ICH DANKE EUCH VORAB SCHON MAL.


    Meine Form hat eine Textbox, in dieser Textbox soll man z.b. diesen Satz eintragen: "Ich bin ein Text"

    Jetzt will ich das wenn der Benutzer z.b. "Ich bin ein text" schreibt, den Fehler angezeigt bekommt in einer zweiten Textbox, unterstrichen ROT. Jetzt soll noch ein Punktesystem dahinter stecken. Pro Wort gibt es 1 Punkt, also würde man in diesen fall 3 Punkte erhalten....

    Hier mal mein ansätz:

    VB.NET-Quellcode

    1. Dim Points Integer
    2. Dim Pointsystem as Integer


    VB.NET-Quellcode

    1. Private Sub WordChecker()
    2. If TextBox1.Text = "Ich bin ein Text" Then
    3. Label1.Text = "Richtig " & Points
    4. Label1.ForeColor = Color.Green
    5. Points += 3
    6. Pointsystem += 3
    7. Else
    8. Label1.Text = "Falsch"
    9. Label1.ForeColor = Color.Red
    10. End If
    11. Label2.Text = "Super, du hast insgesamt: " & Pointsystem
    12. End Sub


    Also das ist im Ausbau, dann gibts wieder eine weitere Textbox die wird auch wieder Überprüft und dann gibts weitere Punkte deshalb Pointsystem.

    Ich hoffe Ihr könnt mir Helfen.
    Einzelnes Unterstreichen in ner TextBox ist m.E. nicht ohne OwnerDrawing machbar.
    Zum Programmablauf: Man hat nen Vorgabesatz und man soll den nachschreiben und dann soll geschaut werden, wieviele Wörter richtig waren, ja?
    1. beide Texte mit Split aufteilen und dann Wort für Wort in einer For-Loop vergleichen. Bei jedem Schleifendurchlauf kannst Du auch gleich nen Punkt für Übereinstimmungen vergeben
    2. Was soll das werden, wenn's fertig ist? Und: Woher kommen die Referenzsätze?
    3. Was ist der Unterschied zwischen Points und Pointsystem?
    4. Warum gibt es keine Minuspunkte?
    5. Was soll unterstrichen werden? Das Wort? Der Buchstabe? Was, wenn man 5 Wörter vorgegeben hat und man 4 oder 6 Wörter schreibt? Was soll dann unterstrichen werden?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @VaporiZed Danke erstmal für deine Antwort.

    Was soll unterstrichen werden? Das Wort? Der Buchstabe? Was, wenn man 5 Wörter vorgegeben hat und man 4 oder 6 Wörter schreibt? Was soll dann unterstrichen werden?


    Also das soll sowas wie ein Diktat werden. Ist der Satz falsch dann wird das GANZE Wort unterstrichen.

    3. Was ist der Unterschied zwischen Points und Pointsystem?


    Das soll so sein, dass man Gesamtpunkte hat und nur für diese Textbox Punkte... also ist die Textbox richtig dann gibts 4 Punkte und er Zeigt Super, du hast 4 Punkte bekommen... habe ich das jetzt 10x richtig gemacht bekomme ich also ständig 4 Punkte und habe Insgesamt 40 Punkte.

    Minuspunkte soll es nicht geben, nur Plus Punkte...

    VBHunter schrieb:

    Ist der Satz falsch dann wird das GANZE Wort unterstrichen.
    Dieser Satz ist widersinnig. Woran merkt man bitte, dass der ganze Satz falsch ist, außer wenn alle Wörter falsch geschrieben wurden?
    Da weder die TextBox noch die RichTextBox (RTB) das Paint-Event unterstützen, müsstest Du entweder auf Hacks wie in diesen Thread (Post von Mr. MonkeyBoy) oder ggf. die FastColoredTextBox (die kann bestimmt sowas) zurückgreifen. Alternativ die RTB verwenden und statt Unterstreichung die falschen Wörter per Selection markieren und mit SelectionColor rot malen.

    VBHunter schrieb:

    ist die Textbox richtig dann gibts 4 Punkte und er Zeigt Super, du hast 4 Punkte bekommen... habe ich das jetzt 10x richtig gemacht bekomme ich also ständig 4 Punkte und habe Insgesamt 40 Punkte.
    ("Ist die TextBox richtig" - inhaltlich fragwürdig, aber ich weiß zumindest, was gemeint ist.) Diese Anforderung ergibt entweder nur dann Sinn, wenn verschiedene Sätze immer 4 Wörter haben, oder Du hast andere Programmanforderungen als beschrieben, da Du oben im Code mit 3 Punkten arbeitest.

    Aber ansonsten habe ich ja schon nen Lösungsvorschlag gemacht, Stichwort Split. Ist das für Dich umsetzbar?
    • Wenn ja, kommst Du jetzt klar?
    • Wenn nein, woran scheitert es?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo @VBHunter

    Ich weis nicht was dein Programm am Schluss noch alles können soll und wo der Schwerpunkt liegt. Wenn die Prüfung von Wörtern und das unterstreichen der Hauptbestanteil wäre würde ich hier die WPF empfehlen.
    Die unterstützt alles was du brauchst fast OutOfTheBox.



    Die Rechtschreibprüfung einfach mit SpellCheck.IsEnabled="True" einschalten und los gehts.
    Auch eigene Wörterbücher können verwendet werden. Siehe hier: docs.microsoft.com/en-us/dotne…ies?view=netframework-4.8

    Es gibt dann Methoden wie: GetNextSpellingErrorCharacterIndex, GetSpellingError, GetSpellingErrorLength, GetSpellingErrorStart

    Aber sei gewarnt, wenn du mehr willst als einfach dieses kleine Konstrukt - die WPF ist total anders als WinForms.

    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. ##

    @VBHunter Du kannst natürlich den Inhalt zweier RichTextBoxen wortweise vergleichen, allerdings wird es beliebig kompliziert, wenn ein Wort ausgelassen, wiederholt oder zwei Worte vertauscht sind.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Nofear23m schrieb:

    Hallo @VBHunter

    Ich weis nicht was dein Programm am Schluss noch alles können soll und wo der Schwerpunkt liegt. Wenn die Prüfung von Wörtern und das unterstreichen der Hauptbestanteil wäre würde ich hier die WPF empfehlen.
    Die unterstützt alles was du brauchst fast OutOfTheBox.

    vb-paradise.de/index.php/Attac…a2a9852445c688573a555a745

    Die Rechtschreibprüfung einfach mit SpellCheck.IsEnabled="True" einschalten und los gehts.
    Auch eigene Wörterbücher können verwendet werden. Siehe hier: docs.microsoft.com/en-us/dotne…ies?view=netframework-4.8

    Es gibt dann Methoden wie: GetNextSpellingErrorCharacterIndex, GetSpellingError, GetSpellingErrorLength, GetSpellingErrorStart

    Aber sei gewarnt, wenn du mehr willst als einfach dieses kleine Konstrukt - die WPF ist total anders als WinForms.

    Grüße
    Sascha


    Danke Sascha, das ist ein guter Hinweis.

    Ich hab das jetzt so das der Benutzer den Text in eine Richtextbox in Form1tippt und es bei Klick auf dem Button, diesen Text an ein neues Fenster mit einer Richtextbox mit Spellcheck übergibt, leider prüft er die Wörter nicht die übergeben werden, nur die die man gerade Schreibt ?(

    VB.NET-Quellcode

    1. Public Class Form2
    2. Private WithEvents RichtextBox1 As New RichtextBoxSpellCheck
    3. Public Sub New()
    4. InitializeComponent()
    5. Panel1.Controls.Add(RichtextBox1.ElementHost)
    6. With RichtextBox1
    7. .IsEnabled = True
    8. .AppendText(Form1.RichTextBox1.Text)
    9. End With
    10. End Sub
    11. End Class
    12. Public Class RichtextBoxSpellCheck
    13. Inherits System.Windows.Controls.RichTextBox
    14. Public Sub New()
    15. Dim eh As ElementHost = New ElementHost
    16. SpellCheck.IsEnabled = True
    17. With eh
    18. .Child = Me
    19. .Dock = DockStyle.Fill
    20. End With
    21. Me.ElementHost = eh
    22. End Sub
    23. Private _elementhost As ElementHost
    24. Public Property ElementHost() As ElementHost
    25. Get
    26. Return Me._elementhost
    27. End Get
    28. Set(ByVal value As ElementHost)
    29. Me._elementhost = value
    30. End Set
    31. End Property
    32. End Class

    So... Soweit hab ich jetzt hin bekommen....

    habe dies als eine Seite laufen so das der User sofort in die Richtextbox schreibt nur das SpellCheck.IsEnabled = False ist. Wenn er jetzt auf ein Button Überprüfen klickt wird "SpellCheck.IsEnabled" auf True gesetzt und er zeigt die Fehler an....

    *Close

    Thanks @ all

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