Next i p>
Command1 (Index). Visible = False p>
Command1 (Index). Caption = -1 p>
End Sub p>
Якщо ви припустити, що обсяг проекту першого підходу більше, ніжпри іншому підході, то будете цілковито праві (8,71 Кб і 4,25 Кбвідповідно). p>
Однак, більш докладні пояснення як створювати і звертатися домасивів елементів управління викладемо на наступному прикладі і після нього. p>
Приклад другий або p>
"сірники дітям - не іграшка!" p>
Уявіть, перед вами виклали два коробка , один з яких порожній,а інший наповнений сірниками. Далі вам пропонують вибрати будь-який з них.
Якщо ви виберіть з двох порожній коробок, то ви виграли, у противному випадку
- До двох наявних додадуть ще один сірникову коробку і перемішати їхтаємним для вас спосіб. Після вибору порожньої коробки серед трьох, передвами опиниться два, інакше - додадуть ще один і таким же методом. Гразакінчується не на вашу користь, якщо число коробок перевищить дев'яти. p>
Уявімо дану програму у вигляді додатку! Для різноманіття,використовуємо інструмент Label (мітка). Розмістимо вибраний інструмент наформі ближче до лівого краю. Ширина кинутої мітки повинна бути в десять -одинадцять разів менше ширини максимізувати вікна. Властивість Indexдорівнює одиниці.
Властивість BackColor має виділяти всю позначку. Властивість Caption кращезмінити. p>
p>
Ще моя задумка не змусить вас турбувати над створенням іншихдев'яти міток, оскільки вони будуть миттєво створені при відкриттіпрограми: p>
Private Sub Form_Load () p>
For i = 2 To 10 p>
Load Label1 (i) 'додаємо ще дев'ять міток p>
Next i p>
End Sub p>
З даної процедури читаємо: "щоб додати об'єкт в масив об'єктівнеобхідно скористатися оператором Load ". Правильно. Скажемо ще, що
"через пробіл після вказівки оператора напишемо ім'я існуючого масивуоб'єктів, а в дужках вираз, що задає індекс додається елементу ".
Тут хороша думка про "вираз". Але і це ще не все. Чи буваютьтакі випадки коли не можна (не вийде) додавати (додати) елемент?
Перевірити правильність можливих припущень можете в наступному розділі статті. P>
Тепер спробуйте змінити число 10 у цій процедурі на 32768. Запустітьпрограму і подивіться, що виходить ... p>
Перш розглядати наступні процедури, в яких дізнаєтеся, як поводитисядо елементів масиву об'єкта оголосимо змінну: p>
Private skolko As Integer 'оголошуємо змінну яка буде повідомлятискільки коробок на столі p>
А ось і ті самі процедури: p>
Private Sub Form_Initialize () p>
Me.WindowState = 2 'розгорнемо віконце p> < p> Label1 (2). Left = Label1 (1). Left + Label1 (1). Width + 60 'спочатку виклалидва
Label1 (2). Visible = True p>
skolko = 2 p>
End Sub p>
Private Sub Label1_Click (Index As Integer) p>
If Fix (skolko * Rnd) + 1 = Index Then
'якщо "вгадали" - один забирається p>
Label1 (skolko). Visible = False p>
skolko = skolko - 1 p>
Else
'якщо не вгадали - виставляється ще одна p>
Label1 (skolko + 1). Left = Label1 (skolko). Left + Label1 (skolko). Width +
60 p>
Label1 (skolko + 1). Visible = True p>
skolko = skolko + 1 p>
End If p>
Select Case skolko ' перевірка на виграш і програш p>
Case 1 p>
MsgBox "Ви виграли!": End p>
Case 10 p>
MsgBox "Ви програли. ": End p>
End Select p>
End Sub p>
Звідси робимо висновок:" звертаються до елементів масиву об'єкта наступнимчином ... Пишуть ім'я масиву об'єктів, потім в дужках вираз,вказує індекс елементу і вже після через точку то властивість, якахочуть або змінити, або прочитати ". умовивід приємно як, по суті,так і за формою. Однак, чи можлива помилка при зверненні до елементу? Такможлива, але ... Але про це трохи пізніше. P>
Тепер інше питання. У попередньому прикладі я показав два варіантиреалізації завдання: без використання масиву об'єктів та з використаннямйого. А чи можна реалізувати якось по-іншому рішення даної гри, але все -таки теж використовуючи масив об'єктів. p>
Так, можна. p>
Розглядаємо те саме завдання, ті ж коробки, з використанням тих жемасивів елементів (... але "якось по-іншому ..."). Все та ж форма, всеТого ж Label1 (0), все таже клавіатура ... На мітці виконуємо комбінаціюклавіш Ctrl + C, потім Ctrl + V (відповідаючи позитивно на що з'явився питаннядіалогового вікна середовища розробки). Додайте інформацію, що з'явилася мітку праворуч відщо була позначки. Повторіть ще: Ctrl + V і розмістіть правіше друга.
Продовжуйте повторення до тих пір поки не розмістите мітку Label1 (9) правішемітки Label1 (8). Тепер виділіть наявні мітки з індексами більшеодиниці. І змініть властивості цих позначок на протилежне - False.
Label1 (1) і Label1 (0) поміняйте місцями. P>
p>
Оголошення змінної залиште таку ж. Залишати ж процедури такимиякими вони є безглуздо, тому що вже в "перших" процедурою --процедурі завантажити програму в пам'ять - з'явиться помилка про неможливістьдодати елемент Label1 (1), так як він уже існує ... Тому видалітьвсі процедури і подивіться, якими вони можуть бути замінені: p>
Private Sub Form_Load () p>
Me.WindowState = 2 p>
skolko = 1 p> < p> End Sub p>
Private Sub Label1_Click (Index As Integer) p>
If Fix (skolko * Rnd) + 1 = Index Then
'якщо "вгадали" - один забирається
Label1 (skolko). Visible = False skolko = skolko - 1 p>
Else
'якщо не "вгадали - виставляється ще одна" skolko = skolko + 1 p> < p> If skolko 10 Then Label1 (skolko). Visible = True p>
End If p>
Select Case skolko 'перевірка на виграш і програш p>
Case 0 p>
MsgBox "Ви виграли!": End p>
Case 10 p>
MsgBox "Ви програли.": End p>
End Select p>
End Sub p>
Завершимо розгляд даного прикладу порівнянням. Проект в першому випадкумає розмір 2,46 Кб, в останньому - 8,57 Кб. Однак відкомпілювалися,виконувані модулі за розміром однакові ...
Інше питання: а яка різниця витраченого часу в обох випадках, якщодруге писати "з нуля"? Відповідь, зрозуміло, суб'єктивна і залежить багато в чому відтого наскільки добре ви знайомі із середовищем розробки, "бачите" реалізаціюкоду і наскільки швидко набираєте її. p>
Приклад останній або чому "індексовані елементи управління"? p>
Щоб зрозуміти, чому коректніше в деяких випадках говорити
"індексовані елементи управління c спільним ім'ям", а не "масивелементів управління "розглянемо наступний невеликий приклад. p>
На формі кинуті шість кнопок, написи яких замінені зірочками: p>
p>
Кнопки мають спільне ім'я M, а індекси у всіх різні: 204, 192, 209, 67,
200, 194 (в порядку розташування на формі зліва направо). Звідси зрозуміло,що позиція на екрані елементів управління не має значення, навіть якщо уних спільне ім'я. p>
А ось і готовий програмний код: p>
Private Sub M_Click (Index As Integer) p>
M (Index). Caption = Chr (Index ) 'напис кнопки - символ номер indexвзятий з таблиці Ascii-символів p>
End Sub p>
Що ж виконає комп'ютер за допомогою цих рядків? По-перше, це процедураобробки клацання по одній з кнопок у якій ім'я M, а індекс Index (дорівнює
67, 192, 194, 200, 204 або 209). По-друге, клацаючи по всіх кнопокпрочитаємо: "МАССИВ". p>
Далі в цю ж процедуру впишіть: p>
M (68). Caption = "Елемент з індексом 68 не існує" p>
Натисніть F5. Клацніть по одній будь-якій кнопці. Вийде помилка: "елементауправління з таким індексом не існує ". Тобто, звертатися до ранішенествореним елементів керування не просто не має сенсу, а викликає крахпрограми. Хоча в звичайному масиві M (67 to 209), елемент M (68) будеіснувати незалежно від того надавали ми якесь значення йомучи ні. Як бачите визначення масиву елементів управління і "звичайного"масиву різні. p>
Назвемо все своїми іменами p>
Отже, якщо вже багато хто і називають, то чому пояснюється в статті
"масиви елементів управління", сформулюємо визначення масивів елементівуправління. Крім того, узагальнимо сказане і додамо нове. P>
Що? P>
Отже, масив елементів управління складається з елементів управління
(елементи масиву), які створюються при побудові візуальної частиниінтерфейсу користувача і/або довантажують програмно (можуть бутидинамічними). Кожен елемент масиву має унікальний ідентифікаторзваний індексом, який є ціле невід'ємне число, неперевищує 32767 (залежить від ОЗУ). Індекси масиву необов'язковочергуються. Позиція елементів масиву довільна. P>
Як? P>
Масив елементів можна створити, кидаючи один і той же цікавитьінструмент на форму і змінюючи властивість Index. Крім того, якщо існуєхоча б один елемент керування з чисельним значенням властивості Index, то,можливо, довантажити нові елементи масиву, використовуючи, оператор Load.
Видаляються догруженние елементи масиву за допомогою оператора Unload. P>
Звернення до властивостей елемента масиву здійснюється аналогічно тому,як звертаються до властивостей об'єкту, що не має чисельного значеннявластивості Index. p>
p>