Daten in TextBox anzeigen

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von mutad.

    Daten in TextBox anzeigen

    Hallo zusammen,

    bin Anfänger und versuche mein erstes Programm in VB zu schreiben,
    darum geht nicht so streng mit mir um.

    Installiert habe ich
    Microsoft Visual Studio Community 2015
    Microsoft Visual Basic 2015

    es gibt eine Form1.vb mit zwei TextBoxen
    und den nachfolgenden Programm Code

    wie schaffe ich es, das die gelesene Zeile in einer Texbox1 angezeigt wird.
    in der Console wird jede eingelesene Zeile angezeigt. Nachdem alle Zeilen in der Console angezeigt wurden
    erscheint die Form1 und zeigt nur die letzte Zeile der Datei in TexBox1 und den Zähler in TextBox2 an.
    Was muss geändert werden?

    bin Anfänger
    Danke im voraus


    VB.NET-Quellcode

    1. Public Class Form1
    2. Public Sub New()
    3. InitializeComponent()
    4. Dim sr As IO.StreamReader
    5. Dim line As String
    6. Dim z As Integer
    7. sr = New IO.StreamReader("C:\Backup\Test.csv")
    8. Do
    9. z = z + 1
    10. line = sr.ReadLine()
    11. If IsNothing(line) Then Exit Do
    12. Console.Write(z)
    13. Console.Write(" / ")
    14. Console.WriteLine(line)
    15. TextBox1.Text = line
    16. TextBox2.Text = z
    17. Loop
    18. End Sub
    @mutad Willkommen im Forum. :thumbup:
    Jede folgende Zeile überscheibt den Text der letzten Zeile.
    Du arbeitest dabei so schnell, dass das System keine Zeit hat, den Inhalt der Textboxen darzustellen, so dass Du nur die letzte Zeile und die Anzahl zu sehen bekommst.
    Währenddessen schiebt die Console den vorherigen Text hoch und hängt den neuen an.
    Bevor Du nun weiter proggst, stell Dein Programm und Dein Studio um auf Option Strict On. Da kommst Du nicht in Verlegenheit, einem String TextBox2.Text einen Integer z zuzuweisen, Du lernst, die Datentypen zu unterscheiden.
    Projekt => Eigenschaften => Kompilieren ==> Option Strict On. (für das aktuelle Projekt)
    Studio => Extras => Optionen => Projekte und Projektmappen => VB-Standard ==> Option Strict On. (für alle zukünftigen Projekte)
    ====
    Was soll den angezeigt werden?
    Alle Zeilen?

    VB.NET-Quellcode

    1. TextBox1.Text = System.IO.File.ReadAllText("C:\Backup\Test.csv")
    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!
    Hallo RodFromGermany,

    Option Strict On habe ich schon mal eingestellt.

    angezeigt werden soll jede Zeile nicht alle Zeilen auf einmal.
    Das fertige Programm soll dann jede eingelesene Zeile nach einem bestimmten Wert untersuchen,
    und evt. neue Dateien erzeugen.
    (Es kommen bestimmt noch mehr TextBox und andere Schaltelemente dazu)
    Dafür braucht man zwar keine Anzeige der Daten aber ich finde es schöner wenn man sieht was passiert.

    mutad schrieb:

    angezeigt werden soll jede Zeile
    getriggert durch welches Ereignis?
    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!
    Hallo RodFromGermany,

    Programm starten, und es fängt sofort an zu arbeiten.
    Kommt in der eingelesenen Zeile zB. der Text "4711" vor, die Zeile und den Zähler in det TextBox1/2 anzeigen.
    Nachste Zeile lesen, Anzeigen wenn gefunden sonst weiter bis zum ende der Datei.
    Interessant wäre auch den Zeilenzähler anzuzeigen, damit man sieht wieviel Zeilen er schon bearbeitet hat.
    so wäre es ineffizient.
    Tatsächlich geht das Lesen einer Datei wesentlich schneller als ein Mensch gucken kann.
    Es hat also keinen Sinn, jede gefundene Zeile einzeln irgendwie vermelden zu wollen.
    Stattdessen solltest du den Summs auslesen, die Ergebnisse in eine List(Of String) packen, und am Ende in die Textbox hauen, etwa mit

    VB.NET-Quellcode

    1. Textbox1.Lines=resultList.ToArray
    Dadurch, dass dabei während der Verarbeitung auch garnet mehr an Controls rumgefummelt wird (was eh keiner sieht), wird die Sache nochmal zigfach schneller.

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

    Hallo ErfinderDesRades,

    ich weiß das es nicht sehr effizient ist, es so zu machen.
    Das was das Programm machen soll, dafür brauchte ich überhaupt keine Anzeige.
    (Zeile einlesen - überprüfen - und in neue Datei abspeichern)
    Das würde ich wohl hinbekommen.
    Es sind ca. 15 000 Zeilen und die Zeit spiel keine Rolle.
    Ich möchte es etwas Bund haben mit Anzeige was so gerade passiert und daraus sofort etwas lernen und ausprobieren.
    Vielleicht ist als Anfänger diese Vorgehensweise falsch aber warum nicht
    Learning by Doing

    mutad schrieb:

    mit Anzeige was so gerade passiert
    Mach Dir einen Zähler und zeig jede 100. Zeile an oder so, das wäre ein annehmbarer Kompromiss.
    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!
    Hallo,

    Ich habe nur das Problem das mein Fenster Form1 in dem sich die TextBox1 / 2 befinden
    erst angezeigt wird wenn alles erledigt ist. Komplette Datei zeilenweise gelesen ist usw.
    Es ist egal ob ich bei der Ausgabe einer Zeile eine Pause einlege das Fenster kommt erst zum Schluss.

    mutad schrieb:

    wenn alles erledigt ist.
    Das hab ich Dir doch bereits im 2. Post geschrieben.
    Du kannst auf Kosten der Laufzeit natürlich nach jedem Setzen eines Textes die Methode .Update() aufrufen, dann wird die Darstellung vom Framework erzwungen.
    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!

    mutad schrieb:

    Ich habe nur das Problem das mein Fenster Form1 in dem sich die TextBox1 / 2 befinden
    erst angezeigt wird wenn alles erledigt ist.
    hihi - tja, so ist das.


    Diese Erfahrung ist nämlich

    mutad schrieb:

    Learning by Doing




    Wenn du da nu wirklich so Anzeige-Mätzchen einbauen willst, musst du ziemlich in die Trickkiste greifen, und eine nebenläufige Datenverarbeitung proggen, weil wenn du die Daten im Mainthread verarbeitest, kann so lange nix angezeigt werden. (Am einfachsten ist halt, diese Phase so kurz als möglich halten, aber das willst du ja nicht).

    Ich denke, am besten wird Async, Await und Task sein, insbesondere das mit meim spezial-ProgressChanged-Objekt.
    Weil sonst bremste dich doch noch aus, wenn du viel zu oft das Gui updatest.

    Nebenläufigkeit ist nämlich immer ein Gesamtpaket, also man muss nicht nur das Gui freihalten, man muss bestimmte Gui-Funktionen ja auch sperren, und man muss Cancel-Möglichkeit bereitstellen, und wenn der User mitten drin die Anwendung schließt, dann soll sie schließen, und nicht abstürzen.
    Denkt man anfangs alles nicht dran, aber Stück für Stück kommt man drauf. :P
    Hallo ErfinderDesRades,

    Problem erkannt
    Dann werde ich erstmal damit anfangen die Daten schnellstmöglich zu verarbeiten,
    und am Schluss eine Zusammenfassung (wieviel Zeilen, wieviel gefundene Wörter usw.) anzeigen.
    Um tief in die Trickkiste zu greifen habe ich die Erfahrung noch nicht.
    Fragen kommen bestimmt noch
    Danke an alle