2013-04-16 7 views
5

Ten kod nie działa Chcę utworzyć tablicę kontrolną na moim Form_Load w VB6, ponieważ muszę zrobić 225 z nich dla tablicy scrabble i muszą być precyzyjne. Mój kod to:Utwórz tablicę kontrolną w kodzie

Private lblblocks(1 To 225) As Label 

Private Sub Form_Load() 
Dim i As Integer, j As Integer 
For i = 1 To 15 
    For j = 1 To 15 
     Dim arrnum As Integer 
     arrnum = (i - 1) * 15 + j 
     Load lblblocks(arrnum) 
     With lblblocks(arrnum) 
      .Width = 1000 
      .Height = 1000 
      .Top = (i - 1) * 1000 
      .Left = (j - 1) * 1000 
      .Visible = True 
      .BackColor = Int(Rnd(1) * 255) + &H100 * Int(Rnd(1) * 255) + &H10000 * Int(Rnd(1) * 255) 
     End With 
    Next j 
Next i 
End Sub 

Użyłem kolorystyki, aby zobaczyć wszystkie moje pudełka z etykietami. Ten kod nie działa. Pojawia się błąd "Zmienna obiektowa lub Z ustawioną zmienną blokową". Jakaś pomoc? Nie wiem, co jest nie tak. Chciałbym zachować tablice z etykietami w tablicy kontrolnej, którą znam, jak zrobić to bez tworzenia tablicy kontrolnej.

+1

W jakiej linii pojawia się błąd? –

+1

Co więcej, czy chcesz mieć "tablicę kontrolną" (jak mówisz) lub "tablicę kontrolną" (jak mówi twój kod)? Są to nieco inne rzeczy. –

+4

Jeśli dobrze pamiętam, musisz umieścić formant * first * 'lblblocks' na formularzu w czasie projektowania. –

Odpowiedz

6

Cody Gray miał rację w swoim komentarzu. Nie wierzę, że możesz stworzyć tablicę kontrolną w locie tylko w kodzie w VB6. Musisz umieścić jedną instancję formantu na formularzu i nadać mu wartość właściwości 0 zero. Spowoduje to utworzenie tablicy kontrolnej z tylko jednym elementem w punkcie zerowym. Następnie można zmodyfikować kod, aby wywołać pożądany efekt, jak w przykładzie:

Private Sub Form_Load() 
    Dim i As Integer 
    Dim j As Integer 

    For i = 0 To 14 
     For j = 0 To 14 
      Dim tileIdx As Integer 
      tileIdx = i * 15 + j 

      'If the tile index is zero, we already have that control, 
      'so there's no need to load new instance. Otherwise, use the 
      'Load method to create a new control in the array with the 
      'specified index. 
      If tileIdx > 0 Then 
       Load lblTile(tileIdx) 
      End If 

      With lblTile(tileIdx) 
       .Width = 1000 
       .Height = 1000 
       .Top = i * 1000 
       .Left = j * 1000 
       .Visible = True 
       .BackColor = Int(Rnd(1) * 255) + &H100 * Int(Rnd(1) * 255) + &H10000 * Int(Rnd(1) * 255) 
      End With 
     Next 
    Next 
End Sub 

Jak zauważono w komentarzu, nie trzeba ładować inną instancję kontroli na indeks tablicy zerowej, ponieważ zrobił to w projektowaniu czas. Zrobiłem również iterację mojej tablicy począwszy od zera dla nieco łatwiejszego obliczania indeksów.

+0

Dzięki za kod/odpowiedź, ale nadal otrzymuję ten sam błąd na linii .Width. Jak mogę zadeklarować tablicę @BobMc? – ashraj98

+1

Nieważne, twój geniusz! Ten kod działał idealnie, po prostu źle nazwa tego obiektu na formularzu. Wielkie dzięki! @ BobMc – ashraj98

Powiązane problemy