我对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
我的错误是:
“句子”未宣布。由于它的保护级别,它可能是可访问的。“
答案 0 :(得分:7)
VB.NET中的变量有一个非常特殊的scope,限制了它们对代码各部分的可用性,具体取决于它们的声明方式和位置。
您的Sentence
变量具有过程级范围,这意味着它仅在声明它的过程中可用。在您的情况下,它在{{1}中声明方法(“Sub”),因此它只能用于该方法中的代码。
相反,如果您希望能够访问类中任何方法中的ABCs_Load
变量(Sentence
始终是VB.NET中的类) ,您可以使用模块级范围声明变量。为此,您需要在Forms
类中添加private field,在任何特定方法(子或函数)的外。这个声明看起来像这样:
Sentences
当然,您也可以将变量声明为Private Sentence As String
而不是Public
,这将使其可用于当前类之外的其他类。例如,如果您希望能够访问Private
变量的内容的第二个表单,则可以在第一个表单的类中将其声明为Sentence
然后从 second 表单的类中的一个方法访问它,如下所示:
Public
请注意,因为它确实存在于另一个表单(与正在访问的表中不同的类)中,所以必须完全限定对它的引用。这就像你的家人可能会称你为“迈克”,但其他人不得不称你为“麦克琼斯”,以区别于“麦克史密斯”。
有关进一步阅读,请参阅MSDN上的这些相关文章:
答案 1 :(得分:2)
你应该把:
Private Sentence As String
公共类句子下的
阅读本文以了解更多信息:http://msdn.microsoft.com/en-us/library/43s90322%28v=VS.80%29.aspx
答案 2 :(得分:0)
将行Dim Sentence As String
从ABCs_Load移至Public Class Sentences
之后。
这将使变量Sentence可用于Sentences类中的所有子函数。
答案 3 :(得分:0)
如果你在页面上的每个webcontrol都得到这个,那么右键单击错误的项目或文件夹和 '转换为WebApplication' 以自动生成其designer.vb文件(它们在具有相同名称的部分类中声明)。
答案 4 :(得分:0)
你应该将它声明为公共变量public sentence as string=string.empty
但如果你是我,我会在整个班级宣布它
样品
public class NameOfClass
dim sentence as string=string.empty
public sub nameOfSub
--you can use the variable 'sentence' here
end sub
public sub nameOfSub2
--you can use the variable 'sentence' here
end sub
end class

答案 5 :(得分:0)
将 SentenceBox.Text = Sentence
放在 End select 之后,可以解决问题。它没有让你,因为 Sentence
没有在 Button3 中定义 :) 希望这会有所帮助。
答案 6 :(得分:-1)
将其置于“公共类句子”下:
Dim Sentence As String = String.Empty
从ABCs_Load范围中删除声明。