Fehler in der Progressbar anzeige...

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von xtts02.

    Fehler in der Progressbar anzeige...

    Hi, ich habe mir eine Progressbar mit Prozentanzeige gebaut. Sie geht logischer weise von 0 - 100 %. Wenn ich jetzt bei mein Spiel auf Bauen klicke und das bauen 10 Sek. dauert, zweigt er es so an:



    Endlos viele Stellen .... Was habe ich falsch gemacht und kann ich anders machen ?(

    PBar als Benutzersteuerelement:

    VB.NET-Quellcode

    1. Public Sub New()
    2. InitializeComponent()
    3. Label1.ForeColor = Color.Black
    4. Me.ForeColor = Color.DeepSkyBlue
    5. End Sub
    6. Protected percent As Double = 0.0
    7. Friend ReadOnly Maximum As Double
    8. Public Property Value As Double
    9. Get
    10. Return percent
    11. End Get
    12. Set(value As Double)
    13. If value < 0 Then value = 0 Else If value > 100 Then value = 100
    14. percent = value
    15. Label1.Text = value.ToString() + " %"
    16. Me.Invalidate()
    17. End Set
    18. End Property
    19. Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
    20. MyBase.OnPaint(e)
    21. Dim b As Brush = New SolidBrush(Me.ForeColor)
    22. Dim lb As New LinearGradientBrush(New Rectangle(0, 0, Me.Width, Me.Height), Color.FromArgb(255, Color.White), Color.FromArgb(50, Color.White), Drawing2D.LinearGradientMode.ForwardDiagonal)
    23. Dim width As Integer = CInt(percent / 100 * Me.Width)
    24. e.Graphics.FillRectangle(b, 0, 0, width, Me.Height)
    25. e.Graphics.FillRectangle(lb, 0, 0, width, Me.Height)
    26. b.Dispose() : lb.Dispose()
    27. End Sub
    28. Private Sub PB_SizeChanged(sender As Object, e As EventArgs) Handles MyBase.SizeChanged
    29. Label1.Location = New Point(Me.Width / 2 - Label1.Width / 2, Me.Height / 2 - Label1.Height / 2)
    30. End Sub
    31. Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click
    32. End Sub


    Extra Class für meine Form:

    VB.NET-Quellcode

    1. Public _progressBar As Pbar
    2. Public _restTimeLabel As Label
    3. Dim fp2 As New FlowLayoutPanel
    4. Public Sub New(timername As String, timetocompleteSeconds As Integer, flowPanel As FlowLayoutPanel)
    5. Timer = New Timer() With {.Interval = 1000, .Enabled = True}
    6. AddHandler Timer.Tick, AddressOf Timer_Tick
    7. RunsOutAt = DateAdd(DateInterval.Second, timetocompleteSeconds, Now)
    8. CreateCluster(timername, flowPanel)
    9. StartetAt = Now
    10. Timer.Start()
    11. End Sub
    12. Public Sub CreateCluster(timername As String, flowPanel As FlowLayoutPanel)
    13. 'Dim fp2 As New FlowLayoutPanel
    14. fp2.FlowDirection = FlowDirection.TopDown
    15. fp2.Controls.Add(New Label() With {.Text = timername}) ', .Width = 150})
    16. _restTimeLabel = New Label() With {.Text = "Ferig in " & New TimeSpan(0, 0, CInt(DateDiff(DateInterval.Second, Now, RunsOutAt))).Duration.ToString}
    17. fp2.Controls.Add(_restTimeLabel)
    18. 'fp2.Controls.Add(New Label() With {.Text = "Fertig um " & RunsOutAt.ToLongTimeString})
    19. _progressBar = New Pbar
    20. With _progressBar
    21. '.Minimum = 0 : .Maximum = 100 :
    22. '.Value = 0
    23. .Width = 100 : .Height = 20
    24. End With
    25. fp2.Controls.Add(_progressBar)
    26. flowPanel.Controls.Add(fp2)
    27. End Sub
    28. 'Public Event Schliessen()
    29. Public Property Timer As Timer
    30. Public Property StartetAt As DateTime
    31. Public Property RunsOutAt As DateTime
    32. Public Sub Timer_Tick()
    33. Dim completTimeSpan As Integer = DateDiff(DateInterval.Second, StartetAt, RunsOutAt)
    34. Dim resttime As Integer = DateDiff(DateInterval.Second, Now, RunsOutAt)
    35. Dim percentValue As Double = ((completTimeSpan - resttime) * 100) / completTimeSpan
    36. If percentValue >= 100 Then
    37. _progressBar.Value = 100
    38. _restTimeLabel.Text = $"Fertig"
    39. _progressBar.Visible = "False"
    40. _restTimeLabel.Visible = "False"
    41. fp2.Visible = "False"
    42. _progressBar.SendToBack()
    43. Timer.Stop()
    44. RaiseEvent Ladenfertig()
    45. Else
    46. _progressBar.Value = percentValue
    47. _restTimeLabel.Text = "Restzeit " & New TimeSpan(0, 0, CType(DateDiff(DateInterval.Second, Now, RunsOutAt), Integer)).Duration.ToString
    48. End If
    49. End Sub
    50. Public Event Ladenfertig()


    EDIT:
    Ich glaub das Problem liegt in der Zeit ... :huh: hab jetzt mein Counter auf 9 Sek gegstellt und er zählt normal....
    was kann ich da ändern?

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