2013-04-16 27 views
5

Mã này không hoạt động Tôi muốn tạo một mảng điều khiển trên Form_Load của tôi trong VB6 bởi vì tôi phải tạo 225 trong số đó cho một bảng scrabble và chúng phải chính xác. Mã của tôi là:Hãy kiểm soát mảng trong mã

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 

Tôi đã sử dụng màu nền để xem tất cả các hộp nhãn của mình. Mã này không hoạt động. Tôi gặp lỗi "Biến đối tượng hoặc Không có biến khối". Bất kỳ giúp đỡ? Tôi không biết có gì sai. Tôi muốn giữ các hộp nhãn trong một mảng điều khiển mà tôi biết cách thực hiện nó mà không làm cho nó trở thành một mảng điều khiển.

+1

Tại dòng nào bạn gặp lỗi? –

+1

Ngoài ra, bạn có muốn một "mảng điều khiển" (như bạn nói) hay "mảng điều khiển" (như mã của bạn nói)? Họ là những thứ hơi khác nhau. –

+4

Nếu tôi nhớ chính xác, bạn cần đặt điều khiển * đầu tiên * 'lblblocks' trên biểu mẫu tại thời điểm thiết kế. –

Trả lời

6

Cody Gray đã sửa nó trong bình luận của mình. Tôi không tin rằng bạn có thể tạo ra một mảng điều khiển trên bay chỉ trong mã trong VB6. Bạn phải đặt một thể hiện của điều khiển trên biểu mẫu và đặt giá trị thuộc tính là Index bằng không. Điều này tạo ra một mảng điều khiển chỉ với một phần tử, tại chỉ số không. Sau đó bạn có thể sửa đổi mã của bạn để tạo ra kết quả mong muốn, như vậy:

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 

Như đã đề cập trong các bình luận, bạn không cần phải tải một ví dụ của sự kiểm soát ở mảng chỉ số zero vì bạn đã làm điều đó ở thiết kế thời gian. Tôi cũng lặp lại mảng của tôi bắt đầu từ số không để tính toán các chỉ mục dễ dàng hơn một chút.

+0

Cảm ơn mã/câu trả lời, nhưng tôi vẫn gặp lỗi tương tự trên dòng .Width. Làm thế nào tôi sẽ khai báo mảng, @BobMc? – ashraj98

+1

Đừng bận tâm, một thiên tài của bạn! Mã đó hoạt động hoàn hảo, tôi chỉ có tên của đối tượng trên biểu mẫu sai. Cảm ơn rất nhiều! @BobMc – ashraj98

Các vấn đề liên quan