2017-01-08 5 views
-3

Ich schreibe ein einfaches Programm, um den Umfang der globalen Variablen und Timer zu verstehen.globale Variable Umfang in vb.net

Public Class Form1 
    Dim gobalVar As Integer 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     globalVar = 0 
    End Sub 

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
     Messagebox.Show(">" + globalVar.ToString) 
     globalVar = 1 
     Messagebox.Show("<" + globalVar.ToString) 

    End Sub 
End Class 

Ich setze den Timer auf 5 Sekunden. Wenn der Timer ist Trigger globalVar ist 0, seit es auf 0 gesetzt ist, wenn das Formular geladen ist, dann nachdem ich globalVar auf 1 gesetzt, und die Messagebox print aber das nächste Mal der Timer ist die Nachricht auszulösen Box show> 0, aus irgendeinem Grund ist die globalVar wieder auf 0.

Sollte die globale Variable nicht 1 sein, da es eine globale Variable ist? erkläre ich globalVar richtig als globale Variable in VB?

Antwort

4

Ihre globale Variable heißt gobalVar, aber die Variable, die Sie in der Timer-Methode verwenden, ist globalVar. VB.Net verzeiht Fehler mit Variablen, die nicht deklariert sind. Es heißt Option Explicit und es ist in diesem Fall ausgeschaltet (ich glaube standardmäßig).

In Ihrem Fall wird jedes Mal, wenn Ihr Timer tickt, die lokale Variable globalVar auf Null neu initialisiert. Ihre tatsächliche globale Variable wird nie berührt. Versuchen Sie Option Explicit On an der Spitze Ihrer Datei und Sie erhalten dann einen Compiler-Fehler. Es kann auch auf Projektebene im Projekteigenschaften-Bildschirm eingestellt werden.

Entweder, oder korrigieren Sie den Tippfehler und benennen Sie Ihre globale Variable um (oder aktualisieren Sie die Timer-Ticks-Variable, um dem Tippfehler zu entsprechen).

Beachten Sie auch, dass dies nicht wirklich eine globale Variable ist. Es ist eine Instanzvariable in Ihrer Form1 Klasse. Wenn Sie eine andere Instanz des Formulars erstellen, würde es eine eigene Instanz der Variablen haben.

Um es "wirklich" global zu machen (oder eher dem nächsten), platzieren Sie es entweder in einem Modul oder machen es Shared in Ihrer Form1 Klasse.

Weitere Informationen zu "globalen" Variablen finden Sie unter this answer.