Form verkleinern in Leiste und wieder vergrößern, -> Laggy

  • VB.NET

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von Solaris.

    Form verkleinern in Leiste und wieder vergrößern, -> Laggy

    Hi Leute, hab da mal ne Frage und zwar...

    hier erstmal der code:

    Quellcode

    1. Dim höhe As Integer = Me.Height
    2. If Me.Height = 450 Then
    3. Do Until höhe = 35
    4. höhe = höhe - 5
    5. Me.Height = höhe
    6. Loop
    7. Me.PictureBox34.Image = My.Resources.Resource1.pfeilunten
    8. Else
    9. If Me.Height = 35 Then
    10. Do Until höhe = 450
    11. höhe = höhe + 5
    12. Me.Height = höhe
    13. Loop
    14. Me.PictureBox34.Image = My.Resources.Resource1.pfeiloben
    15. End If
    16. End If


    Ich habe meinem Program eine Spaltenoption verpasst, dass ich es minimieren und maximieren kann. Minimieren klappt einwandfrei, sieht schön flüssig aus.

    Wenn ich es jedoch maximiere, dann sieht es gar nicht schön aus, der inhalt der form wird erst gar nicht gezeigt, dann blitzt es ein bischen und laggt, und auf dann taucht alles auf. DAs passiert innerhalb ca. 0,5 sekunden. Nun wollte ich fragen woran das liegen könnte, oder ob es vllt eine bessere, flüssigere alternative gibt.

    Vielen Dank und viele Grüße
    Bitte!

    In einem Button ist kein Code!

    Code ist in Methoden (oder in Properties, aber in diesem Fall in einer Methode).
    Weisst du nicht, wie eine Methode aussieht?
    Bitte poste die ganze Methode, also das hier:

    VB.NET-Quellcode

    1. Dim höhe As Integer = Me.Height
    2. If Me.Height = 450 Then
    3. Do Until höhe = 35
    4. höhe = höhe - 5
    5. Me.Height = höhe
    6. Loop
    7. Me.PictureBox34.Image = My.Resources.Resource1.pfeilunten
    8. Else
    9. If Me.Height = 35 Then
    10. Do Until höhe = 450
    11. höhe = höhe + 5
    12. Me.Height = höhe
    13. Loop
    14. Me.PictureBox34.Image = My.Resources.Resource1.pfeiloben
    15. End If
    16. End If
    Und was noch drum herum ist.
    Auf dieses DrumHerum kommt es an, wenn dein Problem mit Async/Await gelöst werden soll.
    so?

    Quellcode

    1. Private Sub PictureBox34_Click(sender As Object, e As EventArgs) Handles PictureBox34.Click
    2. Dim höhe As Integer = Me.Height
    3. If Me.Height = 450 Then
    4. Do Until höhe = 35
    5. höhe = höhe - 5
    6. Me.Height = höhe
    7. Loop
    8. Me.PictureBox34.Image = My.Resources.Resource1.pfeilunten
    9. Me.GroupBox3.Location = New Point(0, 32)
    10. Else
    11. If Me.Height = 35 Then
    12. Do Until höhe = 450
    13. höhe = höhe + 5
    14. Me.Height = höhe
    15. Loop
    16. Me.PictureBox34.Image = My.Resources.Resource1.pfeiloben
    17. Me.GroupBox3.Location = New Point(0, 447)
    18. End If
    19. End If
    20. End Sub
    ja genau - ganz einfach - oder? :thumbsup:
    also probierma dieses, und melde mir als erstes zurück, obs funktioniert (es geht mir immer tierisch auf die Nerven, wenn die Leuts einfach weiterfaseln ohne mir dieses grundlegendste aller Feedbacks zu geben).

    VB.NET-Quellcode

    1. Private Async Sub PictureBox34_Click(sender As Object, e As EventArgs) Handles PictureBox34.Click
    2. Dim höhe As Integer = Me.Height
    3. If Me.Height = 450 Then
    4. Do Until höhe = 35
    5. Await Task.Delay(1)
    6. höhe = höhe - 5
    7. Me.Height = höhe
    8. Loop
    9. Me.PictureBox34.Image = My.Resources.Resource1.pfeilunten
    10. Me.GroupBox3.Location = New Point(0, 32)
    11. Else
    12. Do Until höhe = 450
    13. Await Task.Delay(1)
    14. höhe = höhe + 5
    15. Me.Height = höhe
    16. Loop
    17. Me.PictureBox34.Image = My.Resources.Resource1.pfeiloben
    18. Me.GroupBox3.Location = New Point(0, 447)
    19. End If
    20. End Sub

    Über der Form-Klasse muss evtl. die Imports-Anweisung stehen, damit Tasks erkannt wird:

    VB.NET-Quellcode

    1. Imports System.Threading.Tasks

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

    ja habs gemerkt ^^ also wie gehabt, beim öffnen wird die form gross gezogen und die elemente darin erscheinen erst wenn die form nahezu die volle grösse erreicht hat. schneller musste ich es durch den code machen, da die 5er schritte es dann doch mit await ziemlich langsam machten :D

    Wenn ich es mit 5er schritten mache, dauert es 3mal so lange... aber die elemente tauchen laggy und verzögert nacheinander auf

    Quellcode

    1. Dim drop As Boolean = False
    2. Dim hnDrop As Integer = 125
    3. Dim hDrop As Integer = 450
    4. Private Sub PictureBox1_Click(sender As Object, e As EventArgs) Handles PictureBox1.Click
    5. If drop = False Then
    6. While Not Me.Height = hDrop
    7. Me.Height += 1 : Application.DoEvents()
    8. End While
    9. drop = True
    10. PictureBox1.Image = My.Resources.Arrow_Up_icon
    11. Else
    12. While Not Me.Height = hnDrop
    13. Me.Height -= 1 : Application.DoEvents()
    14. End While
    15. drop = False
    16. PictureBox1.Image = My.Resources.Arrow_Down_icon
    17. End If
    18. End Sub
    nein, keine ironie - ich hab mich nur geirrt. Weil ansonsten in Wpf wirklich ganz ganz anners als WinForms.
    Aber das ist vlt. auch nicht ganz richtig.
    Also richtig ist, dass Wpf duch und durch auf Databinding ausgelegt ist, in einem Ausmass, das in WinForms nicht möglichist.
    Ja, und auch Animationen sind in Wpf ganz anners konzipiert - aber offsichtlich kann man da doch auch olle WinForms-Codes zum Funktionieren bringen.