Vb.net 使用Temp变量在标签数组中循环

Vb.net 使用Temp变量在标签数组中循环,vb.net,Vb.net,我有一个10x10矩阵中包含100个标签的2D数组(它是2D的,因为它代表了现实世界中的一些硬件,如果有人关心的话)。我想循环检查一个条件,如果条件为false,则更改标签背景颜色 我已经尝试了十种不同的方法,但是我一直会抛出一个异常,因为我创建的temp变量不会对其中一个标签名赋值 'Table for correct switch module for corresponding actuator Dim ActLabelLookup(,) As Label = {{MTA91, MTA92

我有一个10x10矩阵中包含100个标签的2D数组(它是2D的,因为它代表了现实世界中的一些硬件,如果有人关心的话)。我想循环检查一个条件,如果条件为false,则更改标签背景颜色

我已经尝试了十种不同的方法,但是我一直会抛出一个异常,因为我创建的temp变量不会对其中一个标签名赋值

'Table for correct switch module for corresponding actuator
Dim ActLabelLookup(,) As Label =
{{MTA91, MTA92, MTA93, MTA94, MTA95, MTA96, MTA97, MTA98, MTA99, MTA100},
{MTA81, MTA82, MTA83, MTA84, MTA85, MTA86, MTA87, MTA88, MTA89, MTA90},
{MTA71, MTA72, MTA73, MTA74, MTA75, MTA76, MTA77, MTA78, MTA79, MTA80},
{MTA61, MTA62, MTA63, MTA64, MTA65, MTA66, MTA67, MTA68, MTA69, MTA70},
{MTA51, MTA52, MTA53, MTA54, MTA55, MTA56, MTA57, MTA58, MTA59, MTA60},
{MTA41, MTA42, MTA43, MTA44, MTA45, MTA46, MTA47, MTA48, MTA49, MTA50},
{MTA31, MTA32, MTA33, MTA34, MTA35, MTA36, MTA37, MTA38, MTA39, MTA40},
{MTA21, MTA22, MTA23, MTA24, MTA25, MTA26, MTA27, MTA28, MTA29, MTA30},
{MTA11, MTA12, MTA13, MTA14, MTA15, MTA16, MTA17, MTA18, MTA19, MTA20},
{MTA1, MTA2, MTA3, MTA4, MTA5, MTA6, MTA7, MTA8, MTA9, MTA10}}

Private Sub UpdateActuatorStatus()
Dim X As Integer
Dim Y As Integer
Dim CurrAct As New Label

For X = 0 To (ActControl.MAX_X - 1)
    For Y = 0 To (ActControl.MAX_Y - 1)
        If TempFunctionalActuatorMatrix(X, Y) = False Then
            CurrAct = ActLabelLookup(X, Y)
            CurrAct.BackColor = Color.Firebrick
        End If
    Next
Next

End Sub
有了这段代码,CurrAct永远不会被设置为任何东西。有人知道我做错了什么吗


您的数组没有初始化(是的,但是它是用nothing初始化的,因为创建表单实例时标签是nothing)

在解析之前尝试填充它(在Form Load或UpdateActuatorStatus中):


将ActLabelLookup的成员级声明更改为:

Dim ActLabelLookup(,) As Label
在窗体的加载事件处理程序中,添加一行对其进行初始化:

ActLabelLookup(,) =
{{MTA91, MTA92, MTA93, MTA94, MTA95, MTA96, MTA97, MTA98, MTA99, MTA100},
{MTA81, MTA82, MTA83, MTA84, MTA85, MTA86, MTA87, MTA88, MTA89, MTA90},
{MTA71, MTA72, MTA73, MTA74, MTA75, MTA76, MTA77, MTA78, MTA79, MTA80},
{MTA61, MTA62, MTA63, MTA64, MTA65, MTA66, MTA67, MTA68, MTA69, MTA70},
{MTA51, MTA52, MTA53, MTA54, MTA55, MTA56, MTA57, MTA58, MTA59, MTA60},
{MTA41, MTA42, MTA43, MTA44, MTA45, MTA46, MTA47, MTA48, MTA49, MTA50},
{MTA31, MTA32, MTA33, MTA34, MTA35, MTA36, MTA37, MTA38, MTA39, MTA40},
{MTA21, MTA22, MTA23, MTA24, MTA25, MTA26, MTA27, MTA28, MTA29, MTA30},
{MTA11, MTA12, MTA13, MTA14, MTA15, MTA16, MTA17, MTA18, MTA19, MTA20},
{MTA1, MTA2, MTA3, MTA4, MTA5, MTA6, MTA7, MTA8, MTA9, MTA10}}

检查
ActControl.MAX_X-1
ActControl.MAX_Y-1
的值,以确保其分别不超过
ActLabelLookup.GetUpperBound(0)
ActLabelLookup.GetUpperBound(1)
。实际的错误消息是什么。例外情况是什么?.Net是基于零的索引,即9x9矩阵。Dim ActLabelLookup(,)作为新标签(9,9){…}当我的条件第一次解析为False时(在本例中,当X=0和Y=1时),将引发异常。所以我不认为我的问题是超过上限。实际错误是“FW Qualification Suite.exe中发生了“System.NullReferenceException”类型的未处理异常”。它专门标记CurrAct.BackColor=Colr.Firebrick行,这是因为当我在VS15的监视窗口中查看它时,CurrAct=Nothing。此代码是否在带有MTA1、MTA2、。。。加载MTA100是为了初始化标签?@Mort啊,当然,FormLoad是触发标签创建的事件,而我的初始化发生在该事件之前。谢谢@nobby
Form\u Load
可能会触发标签创建,但这种情况更可能发生在
InitializeComponent()
方法中。
ActLabelLookup(,) =
{{MTA91, MTA92, MTA93, MTA94, MTA95, MTA96, MTA97, MTA98, MTA99, MTA100},
{MTA81, MTA82, MTA83, MTA84, MTA85, MTA86, MTA87, MTA88, MTA89, MTA90},
{MTA71, MTA72, MTA73, MTA74, MTA75, MTA76, MTA77, MTA78, MTA79, MTA80},
{MTA61, MTA62, MTA63, MTA64, MTA65, MTA66, MTA67, MTA68, MTA69, MTA70},
{MTA51, MTA52, MTA53, MTA54, MTA55, MTA56, MTA57, MTA58, MTA59, MTA60},
{MTA41, MTA42, MTA43, MTA44, MTA45, MTA46, MTA47, MTA48, MTA49, MTA50},
{MTA31, MTA32, MTA33, MTA34, MTA35, MTA36, MTA37, MTA38, MTA39, MTA40},
{MTA21, MTA22, MTA23, MTA24, MTA25, MTA26, MTA27, MTA28, MTA29, MTA30},
{MTA11, MTA12, MTA13, MTA14, MTA15, MTA16, MTA17, MTA18, MTA19, MTA20},
{MTA1, MTA2, MTA3, MTA4, MTA5, MTA6, MTA7, MTA8, MTA9, MTA10}}