2016-08-09 12 views
-2

Ich versuche, eine Nachricht in einer Statusleiste für 30 Sekunden anzuzeigen, wenn bestimmte Bedingungen erfüllt sind. Aus irgendeinem Grund, das Timer.Tick Ereignis wird nicht ausgeführt, wenn der Timer aktiviert ist, bin ich ziemlich sicher, dass ich etwas auf dem Tick Sub verpasse, aber es nicht herausfinden kann.VB.Net Timer.Tick Nicht ausgelöst

Hier ist mein Code:

Dim StatusSecondsPassed As Integer = 0 
    Dim StatusTimer As New Timer() 
    Dim StatusTextField As New ToolStripStatusLabel 


    Public Function WriteStatus(SS As String) 


     If StatusTimer.Enabled = True Then 
      StatusTimer.Enabled = False 
     End If 


     StatusSecondsPassed = 0 

     StatusTimer.Interval = 1 * 1000 

     StatusTimer.Enabled = True 

     Return SS 
    End Function 

    Public Sub StatusTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) 

     Dim cMain_Form As Main_Form 

     StatusSecondsPassed += 1 

     If StatusSecondsPassed = 30 Then 
      cMain_Form.StatusTextBox.Text = "" 
     End If 


    End Sub 

Irgendwelche Ideen? Ich habe versucht, Handles am Ende der Zecke Unter setzen, aber es erzeugt einen Fehler, wenn ich Handles StatusTimer.Tick

+0

bisschen unfair des Downvote und dann keinen Kommentar zu was ist verbesserungsbedürftig ... – SilverShotBee

+1

-1 für einen Kommentar zu verlassen, die über downvotes winselt. Es ist nicht "unfair", eine Frage zu verwerfen; niemand ist verpflichtet, einen Kommentar abzugeben. –

Antwort

3

setzen Sie müssen das Ereignis behandeln:

AddHandler StatusTimer.Tick, AddressOf StatusTimer_Tick 

Diese Zeile besagt, dass, wenn Tick Ereignis eintritt, Ihre Unter wird angerufen werden.

Wenn Sie jedoch die Handles Ursache verwenden möchten, müssen Sie Ihren Timer wie folgt erklären:

Dim WithEvents StatusTimer As New Timer() 

'And your sub 
Public Sub StatusTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles StatusTimer.Tick 

Dieses Verfahren ist jedoch erlaubt Ihnen nicht, die Zuordnung zu entfernen. Mit addHandler Klausel können Sie einen Ereignis-Listener entfernen, indem Sie:

RemoveHandler StatusTimer.Tick, AddressOf StatusTimer_Tick 
+0

Danke nochmal SuperPeanut! Nicht das erste Mal, dass du mir geholfen hast! – SilverShotBee

+0

Oder Sie benötigen 'With Events' in der Deklaration, um 'Handles' auf dem Handler zu aktivieren. – Enigmativity

+0

@Enigmatismus Aktualisierte Antwort nach Ihrem Kommentar –