代码:
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。错误是:对象引用未设置为对象的实例。
因为位置和大小还不存在,有其他方法可以声明它们吗?
由于我认为我现在已经理解了您的问题,我将提供一个关于如何在您的情况下初始化数组的示例:
您希望在类中有一个全局变量,并使用其他对象的属性对其进行初始化。要做到这一点,有必要首先初始化其他对象(否则,如果您尝试使用它们,将获得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