Aktion für jede Zeile in Multilinetextbox auf Knopfdruck

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Fakiz.

    Aktion für jede Zeile in Multilinetextbox auf Knopfdruck

    Guten Tag allerseits,
    mein Problem ist dass ich eine multilinetextbox, ein webbrowser element, zwei buttons und ne normale textbox habe. Beim Start des Programms läd es den Inhalt der Datei x in die Multilinebox (die textbox ist dann mit links gefüllt). Ein button ist "Weiter", der andere " Zurück". Wenn man "weiter" klickt sollte immer der nächste link aus der multilinebox (bzw der erste am Anfang) in die normale Textbox kopiert werden (die url box). Dann wird die jeweilige seite im webbrowser geladen. Sinn soll sein, dass der Nutzer gewisse Daten aus der webseite einfach ablesen kann und zur nächsten gehen kan . Leider weiss ich nicht wie ich den teil mit "link aus der nächsten Zeile kopieren" machen kann. Die zurück funktion wäre fürs erste nicht so wichtig, aber über Hilfe bei dem "weiter" wäre ich sehr dankbar
    MfG Pollo

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „PolloLoco“ () aus folgendem Grund: Edit: Kann mir jemand sagem warum die Tags nicht klappen? Ich hab alles mit kommata getrennt aber es wird als ein ganzes Tag interpretiert (sogar gekürzt)

    Die TextBox verfügt über die Eigenschaft Lines. Lines repräsentiert jede Zeile der Textbox, du kannst also einfach bei jedem Button Klick eine Variable erhöen und anschließend mittels TextBox1.Text = TextBox2.Lines(Variable) durch deine Links navigieren.
    @PolloLoco Willkommen im Forum. :thumbup:
    Wenn Du keine TextBox sondern eine ListBox nimmst und der die Uri-Instanzen der Links zuweist, kannst Du mit nem Doppelklick drauf noch besser jonglieren.
    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!

    PolloLoco schrieb:

    jonglieren
    Das tun, was immer Du bei einem Knopfdruck tun willst. ;)
    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!
    Eventuell wäre ne Listbox ganz gut. Wie viele einträge (Items) kann ich denn in einer Listbox speichern (um die 1300 müssten es mindestens sein, besser mehrere Tausende)? Bei der Textbox hab ich das Problem, dass nicht alle Links reinpassen. Wie könnte ich die Links denn aus einer Textdatei in die ListBox stecken? Vielleicht mit einem OpenFileDialog. Ich bin wirklich ein Anfänger, also bisschen mehr als Stichworte wären sehr hilfreich. Für den Anfang jedenfalls :/
    Edit: Ich hab das mit dem OpenfileDialog gelöst. Wie kann ich jede Zeile da "einfacher" durchgehen, wie von RodOfGermany gesagt?

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

    Mir war langweilig, da habe ich einfach mal etwas gebastelt (Projekt im Anhang).
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim Uri As Uri
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. ' Stellvertretend für die Textdatei, die eingelesen werden soll.
    5. Dim urls() As String = {
    6. "https://www.vb-paradise.de/index.php/BoardList/",
    7. "https://www.vb-paradise.de/index.php/Search/",
    8. "https://www.vb-paradise.de/index.php/Thread/106524-In-einer-Listbox-nur-1632-Eintr%C3%A4ge-m%C3%B6glich/?postID=919448#post919448"
    9. }
    10. For Each u In urls
    11. Uri = New Uri(u) ' Uri erzeugen ...
    12. ListBoxUris.Items.Add(Uri) ' ... und der ListBox hinzufügen.
    13. Next
    14. ListBoxUris.DisplayMember = "Host" ' DisplayMember festlegen. Das kann jede beliebige Eigenschaft von Uri sein, die dann angezeigt wird.
    15. ListBoxUris.SelectedIndex = 0 ' Der erste Eintrag der Listbox wird selektiert.
    16. TextBoxCurrentUrl.Text = ListBoxUris.Items.Item(ListBoxUris.SelectedIndex).ToString ' Der selektierte Eintrag aus der ListBox wird in die TextBox eingetragen.
    17. WebBrowser1.ScriptErrorsSuppressed = True ' Unterdrückt Fehlermeldungen der Javascript engine.
    18. WebBrowser1.Navigate(TextBoxCurrentUrl.Text) ' Webbrowser läd Url aus der Textbox.
    19. End Sub
    20. Private Sub ButtonNext_Click(sender As Object, e As EventArgs) Handles ButtonNext.Click
    21. If ListBoxUris.SelectedIndex < ListBoxUris.Items.Count - 1 Then ' Wenn der Index des selektierten Items unter seimem maximalen wert liegt ....
    22. ListBoxUris.SelectedIndex = ListBoxUris.SelectedIndex + 1 ' .... Index einen rauf, also nächstes Item wählen.
    23. Uri = CType(ListBoxUris.Items.Item(ListBoxUris.SelectedIndex), Uri) ' Hier muss das Item (Object), zu Uri konvertiert werden.
    24. TextBoxCurrentUrl.Text = Uri.AbsoluteUri ' Uri in TextBox eintragen.
    25. End If
    26. End Sub
    27. ' Zurück-Button funktioniert vom Prinzip her ganau so, nur geht es hier runter.
    28. Private Sub ButtonBack_Click(sender As Object, e As EventArgs) Handles ButtonBack.Click
    29. If ListBoxUris.SelectedIndex > 0 Then
    30. ListBoxUris.SelectedIndex = ListBoxUris.SelectedIndex - 1
    31. Uri = CType(ListBoxUris.Items.Item(ListBoxUris.SelectedIndex), Uri)
    32. TextBoxCurrentUrl.Text = Uri.AbsoluteUri
    33. End If
    34. End Sub
    35. ' Wenn sich der Inhalt der TextBox ändert ....
    36. Private Sub TextBoxCurrentUrl_TextChanged(sender As Object, e As EventArgs) Handles TextBoxCurrentUrl.TextChanged
    37. ClearWebBrowser(WebBrowser1, "... Loading") ' .... wird erst der WebBrowser geleert (es gibt bestimmt bessere Methoden)...
    38. WebBrowser1.Navigate(TextBoxCurrentUrl.Text) ' ..... und nun zur Url navigiert.
    39. End Sub
    40. Private Sub ClearWebBrowser(ByVal wb As WebBrowser, Optional textToShow As String = "")
    41. If textToShow = "" Then ' Wenn "textToShow" leer bleibt ...
    42. WebBrowser1.Navigate("about:blank") ' ... wird eine leere Seite angezeigt, ...
    43. Else WebBrowser1.DocumentText = textToShow ' ... ansonsten der angegebene Text.
    44. End If
    45. Do Until wb.ReadyState = WebBrowserReadyState.Complete ' Hier wird so lange eine Schleife durchlaufen, bis der WebBrowser fertig geladen hat.
    46. Application.DoEvents() ' Sollte nur in Ausnahmefällen genutzt werden, hier ist es aber unproblematisch.
    47. Threading.Thread.Sleep(100) ' Bremmst die Schleife etwas, damit sie nich unnötig viele Durchläufe macht.
    48. Loop
    49. End Sub
    50. ' Zu guter letzt, werden noch die Buttons deaktiviert, bzw. aktiviert.
    51. Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBoxUris.SelectedIndexChanged
    52. If ListBoxUris.SelectedIndex = 0 Then
    53. ButtonBack.Enabled = False
    54. Else ButtonBack.Enabled = True
    55. End If
    56. If ListBoxUris.SelectedIndex = ListBoxUris.Items.Count - 1 Then
    57. ButtonNext.Enabled = False
    58. Else ButtonNext.Enabled = True
    59. End If
    60. End Sub
    61. End Class

    Bitte versuche den code, zu verstehen, bei Unklarheiten, einfach möglichst konkrete Fragen stellen.
    Die maximal möglich Anzahl an Items in einer ListBox, ist ca. 32000, das sollte reichen.
    Dateien
    • EasyBrowser.zip

      (40,16 kB, 111 mal heruntergeladen, zuletzt: )

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

    Vielen Dank, den Code versteh ich, denke ich. Mir ist nur unklar warum du im Webbrowser erst eine Leere Seite lädst und dann die Zielseite? Leider kann ich das Projekt nicht öffnen. Fehler: Die ausgewählte Datei ist eine Projektmappendatei, wurde jedoch mit einer neueren Version dieser Anwendung erstellt und kann nicht geöffnet werden.
    Ich hab das mit dem OpenfileDialog gelöst. Wie kann ich jede Zeile da "einfacher" durchgehen.


    Musst du nicht, ListBox1.Items.AddRange(System.IO.File.ReadAllLines("OpenFileDialog.FileName") die Methode ReadAllLines liest die Text Datei zeilenweise aus und gibt ein Array vom Typ String zurück. Mit diesem Array kannst du dann wieder mit AddRange deine ListBox füllen.