引用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!)一个新的,仅限本地的myFoovariables,它与同名的Form / Class级variables没有关系。 本地版本将其他内容隐藏起来。 部分困惑似乎是,有些人认为他们需要(重新)使用Dim之前,他们可以使用一个variables。 你不。


块级范围

直接从MSDN:

 If n < 1291 Then Dim cube As Integer cube = n ^ 3 End If 

相当数量的VB语句创build一个块范围For Each / NextIf / End IfUsing / 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