Was ist an dem Code nur falsch?

  • VB.NET

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

    Was ist an dem Code nur falsch?

    Hallo leute!

    Ich bin neu hier im Forum und habe noch nicht sehr viel Visual Basic Erfahrung. Könnte mir irgendjemand sagen warum der Code nicht funktioniert?

    VB.NET-Quellcode

    1. Public Class Form1Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. PictureBox1.Show()
    3. Button1.Hide()
    4. End SubPrivate Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    5. PictureBox1.Show()
    6. Timer1.Start()
    7. End SubPrivate Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    8. Timer1.Interval = 1
    9. ProgressBar1.MaximumSize = 100
    10. ProgressBar1.MinimumSize = 0
    11. ProgressBar1.Step = 1
    12. ProgressBar1.PerformStep()
    13. If ProgressBar1.Value = 1 ThenPictureBox3.Location = New Point(300, 150)
    14. End If
    15. If ProgressBar1.Value = 2 ThenPictureBox3.Location = New Point(301, 150)
    16. End If
    17. If ProgressBar1.Value = 3 ThenPictureBox3.Location = New Point(302, 150)
    18. End If
    19. If ProgressBar1.Value = 4 ThenPictureBox3.Location = New Point(303, 150)
    20. End If
    21. If ProgressBar1.Value = 5 ThenPictureBox3.Location = New Point(304, 150)
    22. End If
    23. If ProgressBar1.Value = 6 ThenPictureBox3.Location = New Point(305, 150)
    24. End If
    25. If ProgressBar1.Value = 7 ThenPictureBox3.Location = New Point(306, 150)
    26. End If
    27. If ProgressBar1.Value = 8 ThenPictureBox3.Location = New Point(307, 150)
    28. End If
    29. If ProgressBar1.Value = 9 ThenPictureBox3.Location = New Point(308, 150)
    30. End If
    31. If ProgressBar1.Value = 10 ThenPictureBox3.Location = New Point(309, 150)
    32. End IfEnd Sub
    33. End Class

    Es sollte eine PictureBox in gewissen Abständen (nach dem Klick eines Button) von einem Punkt zum anderen Punkt gehen. ?( Und könntet ihr mir auch den ganzen korriegierten Code mir geben?
    Danke im Voraus!
    1. Herzlich Willkommen im Forum(Muss ich mir mal angewöhnen sowas bei einem Neuling zu schreiben *puh*)
    2. Siehe Rest

    Frage: Warum zur Hölle steht dein Timer.Interval auf einer 1 ms ?(
    Noch ne Frage: Warum machst du des mit ner Progressbar?
    Du solltest außerdem die Progressbar Eigenschaften direkt festlegen und nicht bei jedem durchlauf der Timer_Tick sub :wacko:
    Ansonsten verwende mal ne Select Case Abfrage(ist übersichtlicher). Also ungefähr so(Ohne Progressbar gelöst):

    VB.NET-Quellcode

    1. 'Außerhalb der Sub
    2. Dim Schleife as Integer = 0
    3. 'Innerhalb von dem Timer_Tick()
    4. Schleife += 1
    5. Select Case Schleife
    6. Case 1
    7. Picturebox3.Location = New Point(x,y)
    8. Case 2
    9. Picturebox3.Location = New Point(x,y)
    10. 'usw
    11. ...



    Dann musste die Select Case Abfrage nur in dem Timer_Tick durchlaufen lassen.
    Nochwas, beschreibe besser deinen Fehler, was passiert, wenn du den Code ausführst?
    Passiert garnichts oder wird ein Fehler rausgeschmissen?

    Wegen deiner Anfrage ob wir dir direkt den ganzen korrigierten Code geben können: NEIN, können wir nicht. Weshalb? Wo bleibt den der Lerneffekt beim C&P?
    Ich hoffe dir gibt keiner nen kompletten Code :whistling:
    "Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher." Albert Einstein

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

    Willkommen im Forum :)

    1. Schau dir bitte mal mithilfe von Google einige Beispiele/Artikel zu Schleifen an - sehr wichtig wenn du weiter programmieren willst!

    Zu deinem Code:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    3. PictureBox1.Show()
    4. Button1.Hide()
    5. End Sub
    6. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    7. PictureBox1.Show()
    8. 'Das alles musst du nur einmal einstellen, nicht jeden Tick des Timers
    9. Timer1.Interval = 1
    10. ProgressBar1.MaximumSize = 100
    11. ProgressBar1.MinimumSize = 0
    12. ProgressBar1.Step = 1
    13. Timer1.Start()
    14. End Sub
    15. Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    16. ProgressBar1.PerformStep()
    17. 'In diesem Fall kannst du die Value der Progressbar selbst gleich verwenden, da sich die X-Koordinate der PictureBox gleich mit der ProgressBarValue erhöht
    18. PictureBox3.Location = New Point(300 + (Progressbar1.Value - 1), 150)
    19. End Sub
    20. End Class


    Sehe aber keinen direkten Fehler in deinem Code :/

    Tipp: Benenne deine Controls sinnvoll, z.B. statt Button2 dann "Start" oder "PictureBox bewegen"

    Lg. Darkshadow9

    Edit: Code in Spoiler gesetzt -> erst selbst probieren, dann Beispiellösung anschauen!
    So wie es aussieht will der TE mit dem Timer und dem Progressbar gedönse unbewusst eine For Schleife immitieren.
    Deshalb

    VB.NET-Quellcode

    1. Progressbar1.Value = 0
    2. Progressbar1.Step = 1
    3. For i as Integer = 0 to 100 'Deine gewünschte Zahl
    4. Progressbar1.PerformStep()
    5. PictureBox3.Location = New Point(300 + i, 150)
    6. Next

    Alles andere mit Timer und Progressbar.Value wäre dreck.

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

    Ich glaube allerdings auch, dass der TE die Bewegung in Abhängigkeit von der Zeit haben möchte.
    Alles, was man dafür braucht, sind eine Zählervariable und ein Timer, natürlich nicht auf Intervall=1.

    Alternativ, wie immer bei Animationen, WPF.

    lg ST
    | Keine Fragen per PN oder Skype.
    Die Initialisierung des Timers und der ProgressBar gehören in die Form_Load oder so, nicht jedoch in die Timer_Tick-Prozedur.

    VB.NET-Quellcode

    1. Timer1.Interval = 1
    2. ProgressBar1.MaximumSize = 100
    3. ProgressBar1.MinimumSize = 0
    4. ProgressBar1.Step = 1
    Arbeite zunächst mit einem Timer-Intervall von 100, da kannst Du gut erfassen, was passiert.
    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!

    rykoJLL schrieb:

    unbewusst eine For Schleife immitieren.
    @rykoJLL, hast du deinen Snipet mal getestet? Dann mach mal, und ...

    Fiel Fergnügen

    Vatter

    P.S.:
    @TE, wie Rod schrieb und dann ohne dein If und ohne Select Case einfach ins Tick-Event:

    VB.NET-Quellcode

    1. Dim x as Integer = 5 'gibt die Schrittweite für die Bewegung an, kannste auch global deklarieren
    2. Progressbar1.Inkrement()
    3. PictureBox3.Location = New Point(300 +x, 150)
    4. If Progressbar1.Value >= Progressbar1.Max Then
    5. 'beendet den Timer, wenn Progressbar am Ende
    6. TimerXY.Stop
    7. End If
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Moin @Vatter:
    @TeaTree_Tester: Du kannst natürlich einfach mal einen Haltepunkt (F9) in die Timer-Tick-Prozedur reinsetzen und diese mit F10 durchsteppen.
    Mit Klick drauf und Shift+F9 kannst Du Dir den Inhalt der Variablen ausgeben lassen.
    Sieh Dir mal bei Programmunterbrechung das Debug-Menü an, da kann man schon eine ganze Menge mit machen.
    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!