Не считываются индексы контролов массива Image - VB

Формулировка задачи:

Массив 'контролов' Image(33) создается программно, размещается в форме клетками 7Х5 , заполняется картинками. Код между '********* звездочками см. ниже. Не догоняю почему в процедуре клик не считывается индекс элемента, возвращает ошибку 'переменная не определена'. Кто поможет? Массив из трех options ( OptMode ) таки нормально возвращает индекс в 'клике', а ImgLTR - нет. Для проверки создал в той же форме короткий массиве image вручную, индекс тоже читается. Единственное отличие было у ImgLTR : первый индекс =1. Заменил на 0-32, тоже не помогло.
Private Sub ImgLTR_Click(Index As Integer)
    MsgBox "Index=" & CStr(Index): Exit Sub  'debug 'Ошибка на пред. строке
  ....                       'т.е. на входе в процедуру
End sub
 
Private Sub Form_Activate()
  Const btZazor As Byte = 10: Const btIntZazor = 10
  Dim StartLng As String
  Dim i As Byte, rw As Byte, stlb As Byte
  Dim btNumLet As Byte
  Dim ltrHeight As Long, ltrShir As Long 'height and width of single ltr-imageBox
  Dim OptModeNames As Variant
  OptModeNames = Array("Learn", "Pictures-Exam", "Letters-Exam")
  Dim mdb_path As String
  Dim mdb As Database
  Dim rcs As Recordset
  mdb_path = aPath & "ChilDic.INI"   'экономия переменной
 ' Ñ÷èòûâГ*ГҐГ¬ Г*Г*Г·Г*ëüГ*ûé ÿçûê ГЁГ§ INI-ГґГ*éëГ*
   StartLng = sGetINI(mdb_path, "Boot", "StartLng", "nol")
   ...
mdb_path = aPath & "cMDB.mdb"
 If cdFilEx(mdb_path) Then     'global-modl filexists-function
  Set mdb = OpenDatabase(mdb_path, , True)  'read-only = true
  Set rcs = mdb.OpenRecordset("TbLNG", dbOpenSnapshot)                            
  With rcs
    Do While Not .EOF    'reading LNG-list from MDB
      cmbLNG.AddItem .Fields(0)     
      If .Fields(0) = StartLng Then btNumLet = .Fields(1)     
      .MoveNext
    Loop
  End With
 End If
 
  With FrmChilDic
    .WindowState = 2
    ltrShir = (.ScaleWidth - 8 * btZazor) / 7: ltrHeight = (.ScaleHeight - 6 * btZazor) / 5
  End With
  '************************************************************************* pictures-ltrs filing
  With ImgLTR(0)    '1st ltr-imageBox in array
    .Left = btZazor: .Top = btZazor
    .Height = ltrHeight: .Width = ltrShir
   End With
  For i = 2 To 35     ' 7 x 5  image-boxes .  1st imgBox index = 0
    If i > 33 Then GoTo ni   '2 last places are reserved for controls.
   Load ImgLTR(i - 1)
     rw = (i - 1) \ 7 + 1: stlb = (i - 1) Mod 7 + 1
   With ImgLTR(i - 1)
       .Left = stlb * btZazor + (stlb - 1) * ltrShir: .Top = rw * btZazor + (rw - 1) * ltrHeight
       .Height = ltrHeight: .Width = ltrShir
       .Visible = True
   End With
ni:
  Next i
 ' Call ltrFill(StartLng, btNumLet)  'The Call is performed from  cmbLNG_click  
  '**************************************************************************
  With frmMngmnt                      'Mngmnt-controls- location
   .Left = 6 * btZazor + 5 * ltrShir
   .Top = 5 * btZazor + 4 * ltrHeight
   .Height = ltrHeight:
   .Width = ltrShir * 2 + btZazor
   .Caption = ""
  End With
  For i = 2 To 3
     Load OptMode(i)
  Next i
  For i = 1 To 3
    With OptMode(i)
     .Caption = OptModeNames(i)
     .Left = frMode.Left + (btIntZazor + .Width) * (i - 1)
     .Visible = True
    End With
  Next i
  OptMode(1).Value = True
  With cmbLNG
     .Left = frMode.Left
     cmdStart.Top = .Top
     .ListIndex = 0    
  End With
End Sub

Код к задаче: «Не считываются индексы контролов массива Image - VB»

textual
Dim ZazGor1%, ZazGor2%, ZazVer1%, ZazVer2%
 
Private Sub Form_Load()
ZazGor1 = (Me.ScaleHeight - Img1(1).Height * 5) \ 8
ZazGor2 = ZazGor1 * 2
 
ZazVer1 = (Me.ScaleWidth - Img1(1).Width * 7) \ 10
ZazVer2 = ZazVer1 * 2
 
For i = 0 To 4
For j = 0 To 6
s = s + 1
Img1(s).Top = ZazGor2 + (Img1(1).Height + ZazGor1) * i
Img1(s).Left = ZazVer2 + (Img1(1).Width + ZazVer1) * j
Next j
Next i:
End Sub

15   голосов, оценка 4.267 из 5


СОХРАНИТЬ ССЫЛКУ