2016-12-21 3 views
0
Private Time As New Timer 

Private Sub btnWood_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnWood.Click 


    prgWood.Value = 0 

    Time.Interval = 1000 
    Time.Start() 
    AddHandler Time.Tick, AddressOf IncreaseProgressBar 

    If prgWood.Value <> prgWood.Maximum Then 
     btnWood.Enabled = False 
    End If 

    Dim intAmountofWood As Integer = 11 * Rnd() + 10 
    intWood = intWood + intAmountofWood 

    Me.lblWoodAmount.Text = intWood 

Private Sub IncreaseProgressBar(ByVal sender As Object, ByVal e As EventArgs) 

    prgWood.Increment(10) 

    If prgWood.Value = prgWood.Maximum Then 
     prgWood.Increment(0) 
     Time.Stop() 
     btnWood.Enabled = True 
    End If 

End Sub 

Für meinen Fortschrittsbalken verwende ich einen Timer, um den Wert alle 1 Sekunde um 10 zu erhöhen. Wenn ich das Projekt debugge, funktioniert es beim ersten Mal (dauert 10 Sekunden, bis der Fortschrittsbalken fertig ist), aber wenn ich den Knopf ein zweites Mal anklicke, dauert es nur 5 Sekunden, dann immer weniger. Dieser Code ist für ein inkrementelles Spiel, das ich versuche für die Schule zu machen.Fortschrittsbalken wird jedes Mal um die doppelte Geschwindigkeit erhöht

+0

Nur fügen Sie die AddHandler entfernen, der Konstruktor. Sie fügen es jedes Mal hinzu, was bedeutet, dass Ihr Tick-Ereignis bei jedem Start mehrmals aufgerufen wird. – LarsTech

+0

@LarsTech Vielen Dank für die Beantwortung, wie würde ich den AddHandler loswerden, während ich den Timer immer noch mit meinem Fortschrittsbalken verknüpfe? Tut mir leid, ich bin immer noch ziemlich neu in vb. –

Antwort

0

Können Sie das tun?

ein sub erstellen und diesen Code hinzufügen

`

ProgressBar1.Value = e.ProgressPercentage 
If ProgressBar1.Value = ProgressBar1.Maximum Then 
    ProgressBar1.Value = ProgressBar1.Minimum 
End If 

`

dann hier, dass die Unter nennen.

`Private Sub btnWood_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnWood.Click 

    '**Name of the Sub** 
    prgWood.Value = 0 

    Time.Interval = 1000 
    Time.Start() 
    AddHandler Time.Tick, AddressOf IncreaseProgressBar 

    If prgWood.Value <> prgWood.Maximum Then 
     btnWood.Enabled = False 
    End If 

    Dim intAmountofWood As Integer = 11 * Rnd() + 10 
    intWood = intWood + intAmountofWood 

    Me.lblWoodAmount.Text = intWood 

End Sub 
` 

lassen sehen, ob das ein

1

Von LarsTech Kommentar funktioniert:

Public Class Form1 
    Private Time As New Timer 

    Public Sub New() 
     'Initialisation, etc 

     AddHandler Time.Tick, AddressOf IncreaseProgressBar 
    End Sub 

    'Other methods, etc 
End Class 

Dann müssen Sie den AddHandler vom Button Click-Ereignis einmal

Verwandte Themen