VB 2010'变量'未声明.由于它的保护级别,它可能无法访问

ben*_*enj 3 vb.net variables scope declaration

我对VB来说是一个n00b,并且想知道如何在多个Subs中提供变量.它只是一个熟悉VB的测试应用程序.我的代码:

Public Class Sentences

Private Sub SentenceBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SentenceBox.TextChanged
    If Me.Text = Trim(Sentence) Then
        MsgBox("Good job!")
        Main_Menu.Show()
        Me.Close()
    End If
End Sub

Private Sub ABCs_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim random As Integer = CInt((Rnd() * 10) + 1)
    Dim Sentence As String


    Select Case random
        Case 1
            Sentence = "The quick brown fox jumped over the lazy dog!"
        Case 2
            Sentence = "Hi there, how are you doing?"
        Case 3
            Sentence = "What is the answer to life?"
        Case 4
            Sentence = "The cat in the hat was fat."
        Case 5
            Sentence = "John and Sam had always been fat."
        Case 6
            Sentence = "The snow is falling hard."
        Case 7
            Sentence = "Here, dinner is always served nightly."
        Case 8
            Sentence = "The dog barks at the passing cars."
        Case 9
            Sentence = "The dust settles on the books."
        Case 10
            Sentence = "Fire burns brightly when you add kerosene."
    End Select
End Sub

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    SentenceBox.Text = Sentence

    End Sub
End Class
Run Code Online (Sandbox Code Playgroud)

我的错误是:

"句子"没有宣布.由于它的保护等级,它可能是可访问的."

Cod*_*ray 7

VB.NET中的变量具有非常特殊的范围,根据声明的方式和位置,将其可用性限制在代码的各个部分.

您的Sentence变量具有过程级范围,这意味着它仅在声明它的过程中可用.在您的情况下,它在ABCs_Load方法("Sub")中声明,因此它只能用于该方法中的代码.

相反,如果您希望能够访问类Sentence任何方法中的变量(Forms总是VB.NET中的类),则可以使用模块级范围声明变量.为此,您需要任何特定方法(Sub或Function)之外向您的类添加私有字段.这个声明看起来像这样:Sentences

Private Sentence As String
Run Code Online (Sandbox Code Playgroud)


当然,您也可以将变量声明为Public而不是Private,这将使其可用于当前类之外的其他类.例如,如果你有第二个表单,你希望能够访问Sentence变量的内容,你可以Public在第一个表单的类中声明它,然后从第二个表单的类中的一个方法访问它,如下所示:

MessageBox.Show(myForm1.Sentence)
Run Code Online (Sandbox Code Playgroud)

请注意,因为它确实位于另一个表单(与正在访问的表中不同的类)中,所以必须完全限定对它的引用.这就像你的家人可能会称你为"迈克",但其他人不得不称你为"麦克琼斯",以区别于"迈克史密斯".


有关进一步阅读,请参阅MSDN上的这些相关文章: