ListBox - Scroll Problem (kein Code)

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

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von mox.

    ListBox - Scroll Problem (kein Code)

    Hey Leute ich habe mal ein Problem. Da ich es nicht beschreiben kann habe ich da mal ein Video gemacht.

    youtu.be/afc5EuyrQhY

    Wieso geht die ScrollBar immer wieder nach oben und kann man das beheben?
    Ich habe in der ListBox 123456 Zeilen generieren lassen.

    Gesuchter schrieb:

    123456 Zeilen
    Probier es mal mit 32767 (Short.MaxValue).
    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!
    Ersetze in Deinem Test die Zahl

    Gesuchter schrieb:

    123456
    durch 32767
    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!
    Das habe ich, aber was soll denn passieren?
    Falls du das Video nicht gesehen hast:

    Ich habe ein Programm erstellt:



    Das listet ( in einer Listbox ) die Zahl 0 bis TextBox.Text ( ich habe eine ziemlich große Zahl hineingeschriebenen - 123456) auf.



    Ich habe mit dem Code

    VB.NET-Quellcode

    1. ListBox1.SelectedIndex = Label2.Text​
    (Label2.Text = Die Zahl unter "Aktuelle Zahl), es möglich gemacht die gerade erstellte Zahl markiert (bzw. selected) zu haben.
    Und somit kann ich die unterste Zahl in meinem Programm sehen. Doch wenn ich die ScrollBar nach oben mache ( ich muss nicht einmal bis ganz nach oben, ein Klick auf die ScrollBar reicht schon aus)



    und dann mit meiner Maus manuell die ScrollBar bis nach unten machen will, springt die ScrollBar immer zurück (meistens irgendwo in die Mitte):

    Gesuchter schrieb:

    Falls du das Video nicht gesehen hast:
    Das habe ich gesehen.
    Vielleicht beschreibst Du mal den Effekt verbal, damit ich nicht das, was Du meinst, übersehe.
    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!
    ErfinderDesRades - Das habe ich im Private Sub BackgroundWorker1_DoWork geschrieben. Daran kanns nicht liegen. Soll ich ein "vertontes" Video machen oder das Programm hochladen?

    VB.NET-Quellcode

    1. Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    2. For i = -1 To TextBox1.Text - 2
    3. ListBox1.Items.Add(x + 1)
    4. x = x + 1
    5. Label2.Text = x
    6. BackgroundWorker1.ReportProgress(x / TextBox1.Text * 100)
    7. ListBox1.SelectedIndex = Label2.Text
    8. Next
    9. Label2.Text = x + 1
    10. ProgressBar1.Value = 100
    11. ListBox1.Items.Add(x + 1)
    12. End Sub


    Fang an mit

    Gesuchter schrieb:

    Programm hochladen
    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!
    Das habe ich noch nie gemacht.
    Download (*schnipp*)

    Keine ausführbaren Dateien außerhalb des Showrooms!
    Link zu einem Archiv, das eine ausführbare Datei enthält entfernt. ~Thunderbolt

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

    Gesuchter schrieb:

    nur die .exe
    Nein. Das Projekt. Bereinige es vorher.
    Mach ein ZIP draus, klick auf erweiterte Antwort und dann Dateianhänge.
    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 :D Ich habe das ganze Projekt reingepackt.

    Ausführbare Datei im Archiv entfernt.
    RAR-Archiv in ein ZIP-Archiv umgewandelt (nicht jeder hat WinRAR).
    ~Thunderbolt
    Dateien

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

    Gesuchter schrieb:

    reingepackt
    Fang an mit Option Strict On.
    Und gib 10 ein. Dann solltest Du wissen, was passiert. :D
    -----------

    VB.NET-Quellcode

    1. Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    2. Dim value = CInt(TextBox1.Text)
    3. For i = 0 To value
    4. Me.Invoke(Sub()
    5. ListBox1.Items.Add(i)
    6. Label2.Text = i.ToString
    7. ListBox1.SelectedIndex = i
    8. End Sub)
    9. BackgroundWorker1.ReportProgress(i \ value * 100)
    10. Next
    11. End Sub

    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!

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

    Danke für die schnelle Antwort! Da ich nie mit Option Strict On gearbeitet habe. Weiß ich nicht mit den Fehlern weiter zukommen :/

    VB.NET-Quellcode

    1. Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    2. If InStr("0123456789" & Chr(8), e.KeyChar) = False Then e.Handled = True
    3. End Sub


    Das False wird unterkringelt.

    VB.NET-Quellcode

    1. For i As Integer = 0 To Me.ListBox1.Items.Count - 1
    2. Me.ListBox1.SetSelected(i, True)
    3. ProgressBar1.Value = i / TextBox1.Text * 100
    4. Next


    Auch TextBox1.Text.

    VB.NET-Quellcode

    1. While ListBox1.SelectedItems.Count > 1
    2. s1 &= ListBox1.SelectedItem & ", "
    3. ListBox1.SetSelected(ListBox1.SelectedIndex, False)
    4. End While


    Das leider auch ListBox1.SetSelected.

    Und:

    VB.NET-Quellcode

    1. For i = -1 To TextBox1.Text - 2
    2. ListBox1.Items.Add(x + 1)
    3. x = x + 1
    4. Label2.Text = x
    5. BackgroundWorker1.ReportProgress(x / TextBox1.Text * 100)
    6. ListBox1.SelectedIndex = Label2.Text
    7. Next
    8. Label2.Text = x + 1
    9. ProgressBar1.Value = 100
    10. ListBox1.Items.Add(x + 1)


    Das hier:

    TextBox1.Text - x - Label2.Text - x + 1

    Gesuchter schrieb:

    springt trotzdem zu rück
    Bei mir nicht.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Threading
    3. Public Class Form1
    4. Dim x As Integer = -1
    5. Dim a As Integer = 0
    6. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    7. 'Control.CheckForIllegalCrossThreadCalls = False
    8. End Sub
    9. Private Sub TextBox1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress
    10. If InStr("0123456789" & Chr(8), e.KeyChar) = 0 Then e.Handled = True
    11. End Sub
    12. Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
    13. Me.Button1.Enabled = Not String.IsNullOrEmpty(TextBox1.Text)
    14. End Sub
    15. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    16. Me.TextBox1.ReadOnly = True
    17. Me.Button1.Enabled = False
    18. Me.Label3.Text = "Lädt..."
    19. Me.BackgroundWorker1.RunWorkerAsync()
    20. End Sub
    21. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    22. Me.ProgressBar1.Value = 0
    23. Me.Button2.Enabled = False
    24. Dim s1 As String = String.Empty
    25. Me.ListBox1.SelectionMode = SelectionMode.MultiSimple
    26. Dim value = CInt(TextBox1.Text)
    27. For i As Integer = 0 To Me.ListBox1.Items.Count - 1
    28. Me.ListBox1.SetSelected(i, True)
    29. Me.ProgressBar1.Value = i \ value * 100
    30. Next
    31. While ListBox1.SelectedItems.Count > 1
    32. s1 &= ListBox1.SelectedItem.ToString & ", "
    33. ListBox1.SetSelected(ListBox1.SelectedIndex, False)
    34. End While
    35. If Not s1 = "" Then
    36. Clipboard.SetText(s1 & Label2.Text)
    37. End If
    38. Me.ProgressBar1.Value = 100
    39. Me.Label3.Text = "Kopiert!"
    40. Me.ListBox1.SelectionMode = SelectionMode.One
    41. End Sub
    42. Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
    43. Dim value = CInt(TextBox1.Text)
    44. For i = 0 To value
    45. Me.Invoke(Sub()
    46. ListBox1.Items.Add(i)
    47. Label2.Text = i.ToString
    48. ListBox1.SelectedIndex = i
    49. End Sub)
    50. BackgroundWorker1.ReportProgress(i \ value * 100)
    51. Next
    52. End Sub
    53. Private Sub BackgroundWorker1_ProgressChanged(sender As Object, e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
    54. ProgressBar1.Value = e.ProgressPercentage
    55. Label3.Text = e.ProgressPercentage & "%"
    56. End Sub
    57. Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
    58. Label3.Text = "Fertig!"
    59. Button2.Enabled = True
    60. End Sub
    61. End Class

    Bilder
    • Scroll.jpg

      12,23 kB, 282×239, 105 mal angesehen
    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!
    Naja buggy ist vielleicht das falsche Wort. Bei einer so geringen verfügbaren Höhe kann die Scrollbar nicht besser auflösen. Könnte man als eine Art Quantisierungsfehler verbuchen ^^

    Skybird schrieb:

    Das sind ja Ubisoftmethoden hier !