2017-01-08 11 views
-3

私はグローバル変数とタイマーの範囲を理解するための簡単なプログラムを書いています。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 

私はタイマーを5秒に設定しました。 タイマがトリガされているときにglobalVarが0になります。フォームがロードされているときに0に設定されているため、globalVarを1に設定した後にメッセージボックスでメッセージを確認します。しかし、ボックスの表示> 0、何らかの理由でglobalVarが0に戻ります。

グローバル変数であるため、globalVarを1にしないでください。 VBでglobalVarをグローバル変数として正しく宣言していますか?

答えて

4

グローバル変数の名前はgobalVarですが、timerメソッドで使用する変数はglobalVarです。 VB.Netは宣言されていない変数については寛容です。 Option Explicitと呼ばれ、この場合はオフになっています(デフォルトでは信じています)。

あなたの場合、タイマーが刻々と変化するたびに、ローカル変数globalVarがゼロに再初期化されます。 実際のグローバル変数には決して触れません。ファイルの先頭にOption Explicit Onを入れてみると、コンパイラエラーが発生します。また、プロジェクトプロパティ画面でプロジェクトレベルで設定することもできます。

タイポを修正し、グローバル変数の名前を変更する(または、タイマーに合わせてタイマーティック変数を更新する)。

これは実際にはグローバル変数ではありません。これは、あなたのForm1クラスのインスタンス変数です。フォームの別のインスタンスを作成した場合は、変数の独自のインスタンスがあります。

"本当に"グローバルにするには、モジュールに配置するか、またはForm1クラスにSharedにします。

"グローバル変数"の詳細については、this answerを参照してください。