2014-07-20 66 views
0

CODE:VB.NET數組顯式聲明的問題

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}} 

這裏我聲明中包含的位置和兩個文本框的大小類範圍內兩個2 d數組的。我很確定我得到這個錯誤:

An unhandled exception of type 'System.InvalidOperationException' occurred in Recipe Manager.exe Additional information: An error occurred creating the form. See Exception.InnerException for details. The error is: Object reference not set to an instance of an object.

因爲位置和大小不存在,有沒有其他方式來聲明它們?

+1

爲什麼不您在初始化其他選項後初始化數組?以前嘗試做它沒有任何意義。你想達到什麼目的? – Jens

+0

我需要數組的範圍是我的整個類,如果我在** Form_Load **事件處理程序中執行,那麼它不能由類的其餘部分訪問 – ohSkittle

+2

範圍由聲明決定,而不是由初始化。例如。如果您的類中只有'Private ingredientsProperties(,)As Integer',然後執行'ingredientProperties = {{ingredient1.Location.X,ingredient1.Location.Y},{ingredient1.Size.Width,ingredient1.Size。在你的Form_Load中,這個變量被初始化,並且可以像你想要的那樣訪問它。 – Jens

回答

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 
+0

謝謝你,我想出了一個辦法,但這個更好:) – ohSkittle