2011-09-29 73 views
0

我在那裏, 我的目的是在按下按鈕時創建一個新的實例框,該框中有字符串名和Id來填充連接自動生成的ID即0到210加上用戶添加的字符串「Box」。 我早些時候在類框中創建一個結構時遇到了問題,坦率地說,我不確定下面的代碼是否可以工作,因爲我嘗試在VB中運行它我得到一個錯誤,指出我正在使用變量strBoxPositions()和strBoxNumbers )而無需爲其分配值。 這個東西是strBoxPositions()應該被arrPosition()自動填充,它將在創建新對象框的同時被創建,並且strNumbers()將被創建爲空字符串,以便在後一階段被使用如有必要。創建一個類對象框的新實例()

有人可以告訴我如何初始化這些數組來讓程序運行,也許生病能夠看到代碼是否有效,或者只是用更好的代碼和註釋來更正此代碼,而且如果可能會出現一些提示,說明如何在文本框字段上更新一次一個地輸入字符串的strNumbers數組。

感謝您的幫助

Public class form1 
    Public Class Box 

     Public intBoxID As Integer 
     Public strBoxName As String 
     Structure positions 
      Public strBoxPositions() As String 
      Public strBoxNumbers() As String 
     End Structure 
     Public Sub New() 

     End Sub 

     Public Sub New(ByVal BoxID As Integer, ByVal BoxName As String) 

      intBoxID = BoxID 
      strBoxName = BoxName 

     End Sub 

    End Class 

    Private Sub FormLoad(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     Dim ArchiveBox() As Box = {} 
     Dim arrLetters() As String = {"A", "B", "C", "D", "E", "F", "G", "H", "I"} 
     Dim arrNumbers() As String = {"1", "2", "3", "4", "5", "6", "7", "8", "9"} 

     Dim arrPositions() As String '= New String() {} 

     'GABE gave me this code earlier which works fine, thanks.  
     arrPositions = (From letter In arrLetters 
     From number In arrNumbers 
     Select letter + number).ToArray() 
     Dim i As Integer 
     Dim BoxPositions As Box.positions 
     Dim strSampleNr() As String = New String() {""} 
     For i = 0 To 80 

      ListBox1.Items.Add(arrPositions(i)) 
      BoxPositions.strBoxPositions(i) = arrPositions(i) 
      BoxPositions.strBoxNumbers(i) = strSampleNr(i) 

     Next 
    End Sub 
End class 

回答

0

你的數組,其結構位置的部分永遠不會初始化。你應該在昏暗BoxPositions

之後可能對它們進行初始化如果您arrPositions是,你實際上是希望把不同的陣列中的話,我會喜歡的東西去項目的權數:

'this is to create new instances of the arrays used in the position structure 
'Which is what was missed in your initial code. It initializes the arrays as the same size as 
'your arrPositions 

    BoxPositions.strBoxNumbers = New String(arrPositions.Length - 1) {} 
    BoxPositions.strBoxPositions = New String(arrPositions.Length - 1) {} 

那方法是在開始循環過程時準備好大小適當的數組。

但是,由於strSampleNr數組在初始化時沒有合適的大小,因此該循環的初始代碼仍然不起作用。

Dim strSampleNr() As String = New String() {""} 

因爲您沒有指定,所以創建一個長度爲1的字符串數組。

無論如何,在開始嘗試在循環中訪問它們之前,您需要使用關鍵字New來初始化數組。試圖訪問一個沒有實例化的數組會導致你收到的錯誤。

+0

感謝您的回答,所提供的代碼並沒有真正的工作。然而,我已經能夠解決這個問題。我得到了子初始化並創建了位置並將其分配給數組以及空白空間。暗淡ArchiveBox(1)由於框 昏暗BoxPositions(81)作爲Box.positions 昏暗arrPositions()作爲字符串 昏暗i設定爲整數 BoxPositions(ⅰ)=新Box.positions 對於i = 0到80個 BoxPositions(ⅰ ).strBoxPositions = arrPositions(I) BoxPositions(I).strBoxNumbers = 「」 ListBox1.Items.Add(BoxPositions(I).strBoxPositions) ListBox1.Items.Add(BoxPositions(I).strBoxNumbers) 接下來 – giovetti

+0

你什麼在這裏做了一些真正改變的事情。當我回答你時,你有BoxPositions指向一個包含2個數組的結構。現在你有一系列的位置結構。我想我不明白你真的想做什麼。 – Jay

+0

我試圖達到的是這個。 – giovetti

0
Dim ArchiveBox(1) As Box 
    Dim BoxPositions(81) As Box.positions 
    Dim arrLetters() As String = {"A", "B", "C", "D", "E", "F", "G", "H", "I"} 
    Dim arrNumbers() As String = {"1", "2", "3", "4", "5", "6", "7", "8", "9"} 
    Dim arrPositions() As String 
    Dim i As Integer 

    BoxPositions(i) = New Box.positions 

    arrPositions = (From letter In arrLetters 
    From number In arrNumbers 
    Select letter + number).ToArray() 

    For i = 0 To 80 

     BoxPositions(i).strBoxPositions = arrPositions(i) 
     BoxPositions(i).strBoxNumbers = "" 
     ListBox1.Items.Add(BoxPositions(i).strBoxPositions) 
     ListBox1.Items.Add(BoxPositions(i).strBoxNumbers) 

    Next 

林正試圖找出如何訪問BoxID和BoxName屬性,並將其分配給一個文本框中的文本,然後創建並保存每次按鈕被點擊時的它。

相關問題