Listbox automatisch nach unten scrollen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Claudia0815.

    Listbox automatisch nach unten scrollen

    Hallo zusammen,

    ich habe ein kleines Programm geschrieben. Dort wird eine Batch ausgeführt und die CMD-Ausgabe wird per Streamreader in
    eine Listbox weitergeleitet. Das funktioniert auch alles hervorragend, aber die Listbox scrollt nicht automatisch mit nach unten,
    wenn der Stream die Ergebnisse aufführt.

    Ich denke, dass irgendwo im "Do"-Bereich die Anweisung rein muss, aber welche?
    Hat jemand eine Idee?

    Claudia

    Hier der Backworker-Code:

    Quellcode

    1. Dim start_info As New ProcessStartInfo()
    2. Dim proc As New Process
    3. Dim std_out As System.IO.StreamReader
    4. start_info.FileName = ("cmd.exe")
    5. start_info.UseShellExecute = False
    6. start_info.CreateNoWindow = True
    7. start_info.RedirectStandardOutput = True
    8. start_info.WindowStyle = ProcessWindowStyle.Hidden
    9. start_info.WorkingDirectory = "d:\"
    10. start_info.Arguments = ("test.bat")
    11. proc.StartInfo = start_info
    12. proc.Start()
    13. std_out = proc.StandardOutput
    14. Do
    15. Dim line As String = std_out.ReadLine()
    16. ListBox1.Invoke(Sub() ListBox1.Items.Add(line))
    17. Loop While proc.HasExited = False

    Willkommen im Forum.

    Bitte immer vollständige Prozeduren posten, Deine ist nicht vollständig. Das tendiert dazu, zu spekulationieren und falsche Schlüsse zu ziehen.
    BackgroundWorker ist obsolet. Schau mal hier vorbei: Async/Await
    Aber um die Frage zu beantworten: Wenn der BGW fertig ist, schreib einfach: ListBox1.SelectedIndex = ListBox1.Items.Count - 1

    btw: bitte CodeTags verwenden
    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.
    @Claudia0815 Willkommen im Forum. :thumbup:
    Probier mal die Property .TopIndex.
    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!
    Danke für die Willkommens-Grüße 8-)

    Ich habe beide Tipps schon ausprobiert, aber ohne Erfolg. Der Worker läuft längere Zeit bevor er fertig ist. Wenn er läuft
    füllt sich die Listbox sukzessiv. Das Scrollen soll also "live" erfolgen und nicht am Ende.
    Kann das Scrollen auch im "Do" untergebracht werden?
    Geht schon. Statt ListBox1.Invoke(Sub() ListBox1.Items.Add(line)) probier eben

    VB.NET-Quellcode

    1. ListBox1.Invoke(Sub()
    2. ListBox1.Items.Add(line)
    3. ListBox1.SelectedIndex = ListBox1.Items.Count - 1
    4. End Sub)
    5. )

    Sinnvoller wäre es aber vielleicht, alle Ergebnisse zu ermitteln und dann erst alles am Ende in die Listbox zu schreiben.
    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.