VB.NET数组显式声明问题

时间:2014-07-20 20:03:00

标签: arrays vb.net controls scope multidimensional-array

CODE:

Private ingredientProperties(,) As Integer = {{ingredient1.Location.X, ingredient1.Location.Y}, {ingredient1.Size.Width, ingredient1.Size.Height}} ' {{ingredient location X, Y}, {ingredient size X, Y}}
Private amountProperties(,) As Integer = {{amount1.Location.X, amount1.Location.Y}, {amount1.Size.Width, amount1.Size.Height}} ' {{amount location X, Y}, {amount size X, Y}}

这里我在类范围内声明了两个包含两个文本框的位置和大小的二维数组。我很确定我收到了这个错误:

  

Recipe Manager.exe中出现未处理的“System.InvalidOperationException”类型异常   附加信息:创建表单时出错。有关详细信息,请参阅Exception.InnerException。错误是:对象引用未设置为对象的实例。

因为位置和大小尚不存在,是否有其他方法可以声明它们?

1 个答案:

答案 0 :(得分:1)

由于我认为我现在已经理解了您的问题,因此我将提供一个示例,说明如何在您的情况下初始化数组:

您需要在类中使用全局变量,并使用其他对象的属性对其进行初始化。要做到这一点,必须首先初始化其他对象(否则如果你尝试使用它们,你将得到NullReferenceException)。

通常最好不要内联初始化全局变量,因为您实际上并不知道每个变量在哪个点获取其值。最好使用一些初始化方法,该方法在应用程序启动时直接在您完全控制的位置调用。然后,您可以确定变量的所有值。

我写了一些也使用Form.Load事件的示例代码。 (更好的方法是禁用Application Framework并使用自定义Sub Main作为切入点,如果你真的想控制你的启动顺序,但是这里使用Form.Load就好了。)

Public Class Form1

    'Global variables
    Private MyIngredient As Ingredient 'See: No inline initialization
    Private IngredientProperties(,) As Integer 'See: No inline initialization

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        'At this stage, nothing is initialized yet, neither the ingredient, nor your array
        'First initialize the ingredient
        MyIngredient = New Ingredient

        'Now you can enter the values into the array
        With MyIngredient 'Make it more readable
            IngredientProperties = {{.Location.X, .Location.Y}, _
                                    {.Size.Width, .Size.Height}}
        End With
    End Sub
End Class

Public Class Ingredient
    Public Location As Point
    Public Size As Size
    Public Sub New()
        'Example values
        Location = New Point(32, 54)
        Size = New Size(64, 64)
    End Sub
End Class