2013-04-16 13 views
5

このコードは機能しませんVB6で私のForm_Loadで制御配列を作成したいのですが、スクラブルボード用に225を作成する必要があり、正確にする必要があります。私のコードは:コードで制御配列を作成

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 

私はすべての私のラベルボックスを見るためにバックカラーを使いました。このコードは機能しません。 "オブジェクト変数またはWithブロック変数が設定されていません"というエラーが表示されます。どんな助け?私は何が間違っているのか分からない。私はコントロール配列にラベルボックスを保持したいと思います。私はコントロール配列にしなくてもそれを行う方法を知っています。

+1

どの行にエラーがありますか? –

+1

また、「コントロール配列」(あなたが言うように)や「コントロールの配列」(コードの言う通り)が欲しいですか?彼らはやや異なったものです。 –

+4

正しく覚えている場合は、設計時に* first * 'lblblocks'コントロールをフォームに配置する必要があります。 –

答えて

6

コーディグレイは彼のコメントで正しいと思いました。 VB6ではコードでしかコントロール配列を作成することはできません。コントロールの1つのインスタンスをフォームに配置し、Indexのプロパティ値を0に設定する必要があります。これにより、インデックス0の要素が1つしかないコントロール配列が作成されます。あなたはそのようにように、所望の結果を得るためにあなたのコードを変更することができますコメントで述べたように、あなたがすることをしなかったため、配列インデックスゼロでコントロールの別のインスタンスをロードする必要はありません

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 

デザインで時間。私はまた、インデックスをわずかに簡単に計算するためにゼロから始まる配列を繰り返しました。

+0

コード/答えをありがとうが、私はまだ.Width行に同じエラーが発生します。どのように配列@BobMcを宣言しますか? – ashraj98

+1

気にしないで、あなたの天才!そのコードは完璧に機能しました。フォーム上のオブジェクトの名前が間違っていただけです。どうもありがとう! @BobMc – ashraj98

関連する問題