Buchstaben/Zahlen in der Textbox ausgeben Problem!

  • VB.NET

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

    Buchstaben/Zahlen in der Textbox ausgeben Problem!

    Hallo leute.

    Habe vor 2 Wochen schonma ein Thread eröffnet, aber leider hat mir nix weitergeholfen. Ich habe schon von anderen gesagt bekommen, wie man die Wörter und Buchstaben, in einer Textbox, in einem Label ausgibt. Nun wollte ich das mit den Zahlen probieren, allerdings gibt es da ein kleines Problem.
    Wenn ich nun Zahlen von 1-5 reinschreibe, werden diese auch als Buchstaben gezählt. Ich weiß nicht wie ich das ändern könnte.

    Hier ist der Code

    VB.NET-Quellcode

    1. Private Sub Rtxt_editor_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Rtxt_editor.TextChanged
    2. 'Deklaration
    3. Dim wordcount As Integer
    4. Dim a As String() = Rtxt_editor.Text.Split(CChar(" "))
    5. 'Wenn 80 Zeichen eingegeben wurden,
    6. If Rtxt_editor.TextLength >= 80 Then
    7. 'gibt er die Buchstaben aus
    8. lbl_buchstaben_ausgabe.Text = CStr(Rtxt_editor.TextLength)
    9. Else
    10. 'Löscht den Inhalt des Labels
    11. lbl_buchstaben_ausgabe.Text = ""
    12. End If
    13. 'Wenn 80 Zeichen eingegeben wurden,
    14. If Rtxt_editor.TextLength >= 80 Then
    15. 'Wertzuweisung
    16. wordcount = a.Length
    17. 'gibt er die Wörter im Label aus
    18. lbl_wörter_ausgabe.Text = wordcount.ToString
    19. Else
    20. 'Löscht den Inhalt des Labels
    21. lbl_wörter_ausgabe.Text = ""
    22. End If
    23. 'Wenn 80 Zeichen eingegeben wurden,
    24. If Rtxt_editor.Text.Length >= 80 Then
    25. 'gibt er die Anzahl der Ziffern im Label aus
    26. lbl_ziffern_ausgabe.Text = Rtxt_editor.Text.Where(AddressOf Char.IsNumber).Count.ToString()
    27. Else
    28. 'Löscht den Inhalt des Labels
    29. lbl_ziffern_ausgabe.Text = ""
    30. End If
    31. End Sub
    32. End Class
    eine Lösung ists vlt. nicht, aber ich hab dein grause-code mal in was lesbareres umgeformt:

    VB.NET-Quellcode

    1. Private Sub Rtxt_editor_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Rtxt_editor.TextChanged
    2. If Rtxt_editor.TextLength >= 80 Then
    3. lbl_buchstaben_ausgabe.Text = Rtxt_editor.TextLength.tostring
    4. Dim wordcount = Rtxt_editor.Text.Split().length
    5. lbl_wörter_ausgabe.Text = wordcount.ToString
    6. lbl_ziffern_ausgabe.Text = Rtxt_editor.Text.Where(AddressOf Char.IsNumber).Count.ToString()
    7. Else
    8. For Each lbl In {lbl_buchstaben_ausgabe, lbl_wörter_ausgabe, lbl_ziffern_ausgabe}
    9. lbl.Text = ""
    10. Next
    11. End If
    12. End Sub
    ungetestet
    Es gibt sicher kürzere Lösungen, aber diese klappt zumindest (Falls ich richtig verstanden habe, das es um die Anzahl der einzelnen Dinge geht) :)

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim AnzahlBuchstaben As Integer = 0
    3. Dim AnzahlZahlen As Integer = 0
    4. Dim RestlicheZeichen As Integer = 0
    5. Dim LeerZeichen As Integer = 0
    6. For i = 0 To TextBox1.Text.Length - 1
    7. If TextBox1.Text(i) = " " Then
    8. LeerZeichen += 1
    9. ElseIf IsNumeric(TextBox1.Text(i)) Then
    10. AnzahlZahlen += 1
    11. ElseIf Char.IsLetter(TextBox1.Text(i)) Then
    12. AnzahlBuchstaben += 1
    13. Else
    14. RestlicheZeichen += 1
    15. End If
    16. Next
    17. MsgBox("Zahlen:" & AnzahlZahlen.ToString & " Buchstaben: " & AnzahlBuchstaben.ToString & " Leerzeichen: " & LeerZeichen.ToString & " Sonstiges:" & RestlicheZeichen.ToString)
    18. End Sub



    Edit: Das er bei dir auch Zahlen als Buchstaben anzeigt, liegt soweit wie ich das sehe bei dir an Zeile 10.
    Da packst du die GESAMTE Länge des Textes rein, egal wie der Inhalt ist.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „RoulettePilot“ ()

    Hey, danke für die Hilfe.
    @RoulettePilot Hätte noch eine Frage zu deinem Code. Könntest du mir erklären, was du da gemacht hast?
    Z.B warum du bei der Schleife 0 to TextBox.Length - 1 gemacht hast, was die Methode IsNumeric bewirkt oder Char.IsLetter. Bei dem Rest kann ich mir denken worum es sich handelt.

    Lg Holywarrior1 :)

    Holywarrior1 schrieb:

    ..@RoulettePilot Hätte noch eine Frage zu deinem Code. Könntest du mir erklären, was du da gemacht hast?
    Z.B warum du bei der Schleife 0 to TextBox.Length - 1 gemacht hast, was die Methode IsNumeric bewirkt oder Char.IsLetter.

    Eigentlich hatte ich es extra ausführlich und nicht als 1-Zeiler gemacht, weil ich dachte, dann kann man besser sehen, was da vor sich geht.

    also.. bei der Schleife wird der gesamte Text Zeichen für Zeichen (also praktisch Char für Char)durchgegangen, wobei 0 = die Position des 1. Zeichens ist,1 die des zweiten usw.
    "Toller Text"
    0= "T"
    1= "o"
    2= "l"
    ...
    9= "x"
    10="t"
    usw. Und da die Zählung bei 0 beginnt, heist ist das Ende der Schleife eines weniger als die direkte Anzahl. Deshalb " eins weniger als die gesamte Länge"
    "isNumeric" testet ein Zeichen oder ein String, ob es "numerisch" = "Nummer" = Zahl = Ziffer ist.
    Und Char.isLetter testet, ob es sich um einen Buchstaben handelt (Letter= engl. Buchstabe)

    alle Klarheiten beseitigt? :)

    Holywarrior1 schrieb:

    was die Methode IsNumeric bewirkt oder Char.IsLetter.
    Schreib den Code hin, klick mit der Maus drauf und drück die Taste F1 (= Hilfe). Es öffnet sich die MSDN und Du bekommst alle relevanten Informationen direkt von Microsoft und musst Dich nicht mit möglichen Fehlinterpretationen hier im Forum rumärgern. ;)
    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!