表单中其他位置的引用变量和对象

表单中其他位置的引用变量和对象

我正在尝试将设备对象传递给表单对象,然后在窗体上的按钮的单击事件中使用该设备对象。但我不知道如何在按钮事件中正确引用设备对象。

我使用以下方法设置新表单实例:

Public Sub New(ByRef thisEquip As classEquipment)
    Me.InitializeComponent()
    Me.Text = thisEquip.equipName & " Tests"End Sub

并设置按钮单击事件,如下所示:

Private Sub btnUpdateAndClose_Click(sender As Object, e As EventArgs) Handles btnUpdateAndClose.Click    Call updateTestList(thisEquip)End Sub

但'thisEquip'对象无法识别。我认为这是因为发件人是按钮而不是表单本身。但是,我不知道如何从表单中引用设备对象。


jeck猫
浏览 336回答 2
2回答

沧海一幻觉

该范围取决于在哪里声明一个变量。您可能错过了浏览链接的内容 - 每个范围级别摘要都包含声明它的短语。现在看看你的构造函数:Public&nbsp;Sub&nbsp;New(ByRef&nbsp;thisEquip&nbsp;As&nbsp;classEquipment)thisEquip被声明为构造函数的参数。因此,它只存在于该程序中。程序采用的形式或thisEquip形式(或模块或其他任何形式)中提到的事实是偶然的。虽然构造函数确实在几个方面是特殊的,但在Scope的问题上,它只是另一个过程。表格级别范围保存对其的引用以供其他地方使用:Public&nbsp;Class&nbsp;Form1&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;declare&nbsp;a&nbsp;variable&nbsp;to&nbsp;hold&nbsp;the&nbsp;reference &nbsp;&nbsp;&nbsp;&nbsp;Private&nbsp;myEquip&nbsp;As&nbsp;classEquipment&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;declare&nbsp;an&nbsp;array &nbsp;&nbsp;&nbsp;&nbsp;Private&nbsp;myImgs&nbsp;As&nbsp;Image() &nbsp;&nbsp;&nbsp;&nbsp;Public&nbsp;Sub&nbsp;New(ByRef&nbsp;thisEquip&nbsp;As&nbsp;classEquipment) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myEquip&nbsp;=&nbsp;thisEquip&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;assign&nbsp;param&nbsp;to&nbsp;the&nbsp;var &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;assign&nbsp;array&nbsp;of&nbsp;images&nbsp;to&nbsp;the&nbsp;Form&nbsp;level&nbsp;var &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&nbsp;via&nbsp;a&nbsp;temp&nbsp;array &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myImgs&nbsp;=&nbsp;New&nbsp;Image()&nbsp;{My.Resources.add,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;My.Resources.ballblack,&nbsp;My.Resources.ballblue, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;My.Resources.ballgreen} &nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;Sub在表单级别声明,它具有表单/类级别范围。您现在myEquip可以在表单中的任何位置引用或myImgs。&nbsp;仅在将某些内容分配给表单级对象时不要使用&nbsp;Dim&nbsp;- 它将创建一个新的本地但名称相同的变量。其他常见范围级别:程序级别范围Private&nbsp;myFoo&nbsp;as&nbsp;Int32Private&nbsp;Sub&nbsp;DoSomething() &nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;myBar&nbsp;As&nbsp;String&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;myBar&nbsp;=&nbsp;"Ziggy" &nbsp;&nbsp;&nbsp;&nbsp;... &nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;myFoo&nbsp;As&nbsp;Int32&nbsp;=&nbsp;7End&nbsp;Sub这通常称为本地范围。我正在使用程序级别,因为它与其他术语进行了比较和对比。myBar在DoSomething方法中声明,因此它具有过程级别范围 - 它只存在于该方法中。试图在别处使用它会导致错误。这类似于上面的构造函数示例,主要区别在于thisEquip对象作为参数传递而不是在本地声明。这导致一些人感到困惑:Dim myFoo方法中声明(创建!)一个新的,仅本地myFoo变量,它与同名的Form / Class级别变量无关。本地版本遮蔽了另一个版本。对此的一些困惑似乎是有些人认为他们需要(重新)使用Dim它们才能使用变量。你不。块级范围直接来自MSDN:If&nbsp;n&nbsp;<&nbsp;1291&nbsp;Then &nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;cube&nbsp;As&nbsp;Integer &nbsp;&nbsp;&nbsp;&nbsp;cube&nbsp;=&nbsp;n&nbsp;^&nbsp;3End&nbsp;If相当数量的VB语句创建了一个块范围(For Each/&nbsp;Next,If/&nbsp;End If和Using/&nbsp;End Using)。在块内声明的变量,其范围仅限于该块。基本上,(几乎)任何导致缩进的内容都会创建一个块范围。Private&nbsp;Sub&nbsp;..... &nbsp;&nbsp;&nbsp;&nbsp;Dim&nbsp;cube&nbsp;As&nbsp;Int32&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;n&nbsp;<&nbsp;1291&nbsp;Then &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cube&nbsp;=&nbsp;n&nbsp;^&nbsp;3 &nbsp;&nbsp;&nbsp;&nbsp;End&nbsp;If现在,cube可以在过程的其他地方使用:它的范围已从Block更改为Local。有关更多详细信息,请参阅MSDN:-&nbsp;Visual Basic中的范围-&nbsp;值类型与引用类型

米脂

那讲得通;&nbsp;我的问题是我错误地认为构造函数的范围在它处于活动状态时应用于该表单对象。我通过了ThisEquip byRef,因为我想对它进行更改;&nbsp;但现在我正在对myEquip应用更改。有没有比在构造函数中传递thisEquip byRef更好的地方?&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP