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:
Extra Class für meine Form:
EDIT:
Ich glaub das Problem liegt in der Zeit ... hab jetzt mein Counter auf 9 Sek gegstellt und er zählt normal....
was kann ich da ändern?
Endlos viele Stellen .... Was habe ich falsch gemacht und kann ich anders machen
PBar als Benutzersteuerelement:
VB.NET-Quellcode
- Public Sub New()
- InitializeComponent()
- Label1.ForeColor = Color.Black
- Me.ForeColor = Color.DeepSkyBlue
- End Sub
- Protected percent As Double = 0.0
- Friend ReadOnly Maximum As Double
- Public Property Value As Double
- Get
- Return percent
- End Get
- Set(value As Double)
- If value < 0 Then value = 0 Else If value > 100 Then value = 100
- percent = value
- Label1.Text = value.ToString() + " %"
- Me.Invalidate()
- End Set
- End Property
- Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs)
- MyBase.OnPaint(e)
- Dim b As Brush = New SolidBrush(Me.ForeColor)
- 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)
- Dim width As Integer = CInt(percent / 100 * Me.Width)
- e.Graphics.FillRectangle(b, 0, 0, width, Me.Height)
- e.Graphics.FillRectangle(lb, 0, 0, width, Me.Height)
- b.Dispose() : lb.Dispose()
- End Sub
- Private Sub PB_SizeChanged(sender As Object, e As EventArgs) Handles MyBase.SizeChanged
- Label1.Location = New Point(Me.Width / 2 - Label1.Width / 2, Me.Height / 2 - Label1.Height / 2)
- End Sub
- Private Sub Label1_Click(sender As Object, e As EventArgs) Handles Label1.Click
- End Sub
Extra Class für meine Form:
VB.NET-Quellcode
- Public _progressBar As Pbar
- Public _restTimeLabel As Label
- Dim fp2 As New FlowLayoutPanel
- Public Sub New(timername As String, timetocompleteSeconds As Integer, flowPanel As FlowLayoutPanel)
- Timer = New Timer() With {.Interval = 1000, .Enabled = True}
- AddHandler Timer.Tick, AddressOf Timer_Tick
- RunsOutAt = DateAdd(DateInterval.Second, timetocompleteSeconds, Now)
- CreateCluster(timername, flowPanel)
- StartetAt = Now
- Timer.Start()
- End Sub
- Public Sub CreateCluster(timername As String, flowPanel As FlowLayoutPanel)
- 'Dim fp2 As New FlowLayoutPanel
- fp2.FlowDirection = FlowDirection.TopDown
- fp2.Controls.Add(New Label() With {.Text = timername}) ', .Width = 150})
- _restTimeLabel = New Label() With {.Text = "Ferig in " & New TimeSpan(0, 0, CInt(DateDiff(DateInterval.Second, Now, RunsOutAt))).Duration.ToString}
- fp2.Controls.Add(_restTimeLabel)
- 'fp2.Controls.Add(New Label() With {.Text = "Fertig um " & RunsOutAt.ToLongTimeString})
- _progressBar = New Pbar
- With _progressBar
- '.Minimum = 0 : .Maximum = 100 :
- '.Value = 0
- .Width = 100 : .Height = 20
- End With
- fp2.Controls.Add(_progressBar)
- flowPanel.Controls.Add(fp2)
- End Sub
- 'Public Event Schliessen()
- Public Property Timer As Timer
- Public Property StartetAt As DateTime
- Public Property RunsOutAt As DateTime
- Public Sub Timer_Tick()
- Dim completTimeSpan As Integer = DateDiff(DateInterval.Second, StartetAt, RunsOutAt)
- Dim resttime As Integer = DateDiff(DateInterval.Second, Now, RunsOutAt)
- Dim percentValue As Double = ((completTimeSpan - resttime) * 100) / completTimeSpan
- If percentValue >= 100 Then
- _progressBar.Value = 100
- _restTimeLabel.Text = $"Fertig"
- _progressBar.Visible = "False"
- _restTimeLabel.Visible = "False"
- fp2.Visible = "False"
- _progressBar.SendToBack()
- Timer.Stop()
- RaiseEvent Ladenfertig()
- Else
- _progressBar.Value = percentValue
- _restTimeLabel.Text = "Restzeit " & New TimeSpan(0, 0, CType(DateDiff(DateInterval.Second, Now, RunsOutAt), Integer)).Duration.ToString
- End If
- End Sub
- Public Event Ladenfertig()
EDIT:
Ich glaub das Problem liegt in der Zeit ... 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“ ()