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。错误是:对象引用未设置为对象的实例。
因为位置和大小尚不存在,是否有其他方法可以声明它们?
答案 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