引用variables和表单中其他位置的对象
我试图将一个设备对象传递给一个表单对象,然后在窗体上的一个button的单击事件中使用该设备对象。 但是我不知道如何正确引用button事件中的设备对象。
我使用以下方法设置新的表单实例:
Public Sub New(ByRef thisEquip As classEquipment) Me.InitializeComponent() Me.Text = thisEquip.equipName & " Tests" End Sub
并设置像这样的button点击事件:
Private Sub btnUpdateAndClose_Click(sender As Object, e As EventArgs) Handles btnUpdateAndClose.Click Call updateTestList(thisEquip) End Sub
但“thisEquip”对象不被识别。 我认为这是因为发件人是button,而不是forms本身。 但是,我不知道如何从表单中引用设备对象。
范围取决于声明variables的位置。 您可能错过了略读链接的内容 – 每个作用域级别摘要都包含它所声明的短语。
现在看看你的构造函数:
Public Sub New(ByRef thisEquip As classEquipment)
thisEquip
被声明为构造函数的参数。 因此,它只存在于该程序中。 这个过程是以forms(或模块或其他)的forms提供的,或者thisEquip
是附带的。 虽然构造函数在几个方面是特殊的,但在范围问题上,这只是另一个过程。
表单级范围
为了保存对其他地方使用的引用:
Public Class Form1 ' declare a variable to hold the reference Private myEquip As classEquipment ' declare an array Private myImgs As Image() Public Sub New(ByRef thisEquip As classEquipment) InitializeComponent() ... myEquip = thisEquip ' assign param to the var ' assign array of images to the Form level var ' via a temp array myImgs = New Image() {My.Resources.add, My.Resources.ballblack, My.Resources.ballblue, My.Resources.ballgreen} End Sub
在表单级声明 ,它具有表单/类级别范围。 现在可以在表单的任何位置引用myEquip
或myImgs。 当仅仅给表单级对象赋值的时候不要使用 Dim
,它会创build一个新的本地variables,但是同名的variables。
其他常见的范围级别:
程序级别范围
Private myFoo as Int32 Private Sub DoSomething() Dim myBar As String myBar = "Ziggy" ... Dim myFoo As Int32 = 7 End Sub
这通常被称为本地范围 。 我正在使用程序级别,因为它比较和更好地与其他条款进行比较。
myBar
是在DoSomething
方法中声明的,所以它具有过程级作用域 – 它只存在于该方法中。 尝试在别处使用它将导致错误。 这与上面的构造函数示例类似,主要区别在于thisEquip
对象作为parameter passing,而不是在本地声明。
这导致一些混淆:方法中的Dim myFoo
声明(创build!)一个新的,仅限本地的myFoo
variables,它与同名的Form / Class级variables没有关系。 本地版本将其他内容隐藏起来。 部分困惑似乎是,有些人认为他们需要(重新)使用Dim
之前,他们可以使用一个variables。 你不。
块级范围
直接从MSDN:
If n < 1291 Then Dim cube As Integer cube = n ^ 3 End If
相当数量的VB语句创build一个块范围 ( For Each
/ Next
, If
/ End If
和Using
/ End Using
)。 在块内声明的variables的范围仅限于该块。 基本上,(几乎)任何导致缩进的东西都会创build一个块范围。
Private Sub ..... Dim cube As Int32 If n < 1291 Then cube = n ^ 3 End If
现在, cube
可以在过程中的其他地方使用:其范围已经从Block变为Local。
有关更多详细信息,请参阅MSDN:
– 在Visual Basic中的作用域
– 值types与引用types