Не считываются индексы контролов массива 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»
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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д