Зоною видимості змінних
А тепер поговоримо про важливе засобі забезпечення зручності і надійності програмування на Visual Basic - про механізм завдання зон видимості змінних, процедур і інших елементів Visual Basic. В 17.2 ми вже стикалися з цим механізмом, коли змінні, оголошені всередині процедури, були локальними в процедурі, тобто невидимими зовні процедури. Тому їх не можна було використовувати в інших процедурах модуля. Якщо ви забули цей розділ, то зараз перечитайте.
Перечитала? Добре. Для змінних в Visual Basic визначені 3 зони видимості:
Локальні змінні процедури
Видно тільки всередині процедури, в якій вони оголошені
Оголошуються оператором Dimвнутрі процедури
Локальні змінні модуля
Видно скрізь всередині модуля, в якому вони оголошені. З інших модулів не видно
Оголошуються оператором Dim або Privateв верхній частині модуля, зовні процедур
Глобальні (загальнодоступні) переменниепроекта
Видно звідусіль з усіх модулів проекту
Оголошуються оператором Publicв верхній частині модуля, зовні процедур
Як бачите, перша зона - найвужча, третя - найширша. Приклад вікна коду:
Public a As Integer 'Глобальна змінна
Private b As Integer 'Локальна змінна модуля
Private Sub Command1_Click ()
Private c As Integer 'Локальна змінна процедури
З першими двома зонами видимості ви знайомі. З третьої зоною зараз познайомимося. Ось як можна з одного модуля звертатися до глобальних змінних, оголошених в іншому модулі. Нехай в нашому проекті створені дві форми: Form1 і Form2. Ось вікно коду форми 1:
Public a As Integer
Private Sub Command1_Click ()
Оператор Public оголошує змінну a як глобальну (або загальнодоступну), видиму з усіх модулів. Натиснувши на кнопці форми 1, ви привласнюєте змінної a значення 10.
Ось вікно коду форми 2:
Private Sub Command1_Click ()
Натиснувши на кнопці форми 2, ви друкуєте 10 - правильне значення змінної a.
Як бачите, для того, щоб звернутися до змінної, оголошеної в іншому модулі, необхідно вказати господаря змінної. Visual Basic звик, що у чужих елементів господар повинен бути зазначений, якщо ж господар не вказано, значить елемент "свій". Спробуємо замість Debug.Print Form1.a написати просто Debug.Print a. Оскільки господар не вказано, Visual Basic зрозуміє, що змінна a "своя", тобто належить формі 2. (Це нічого, що вона не оголошена, Visual Basic все одно вважає її існуючої.) А оскільки "своєю" змінної a нічого не присвоєно , то нічого і не буде надруковано. У покроковому режимі ви побачите, що якщо в формі 1 значення a дорівнює 10, то в формі 2 значення a равноEmpty (a = Empty). За англійськи це означає "порожньо", тобто змінної не було присвоєно ніякого значення.
Отже, якщо ми хочемо, щоб змінна була видна у всьому проекті, ми оголошуємо її оператором Public. Така змінна називається глобальною. Якщо ж ми хочемо, щоб змінна була видна тільки в своєму модулі (була локальною в модулі), ми оголошуємо її оператором Dim. Замість оператора Dim прийнято використовувати оператор Private. По дії вони не відрізняються, але англійський сенс слова Private (приватна власність, вхід заборонений) краще підходить до випадку, тому програмісти в основному використовують його.
Зоною видимості процедур
Процедури можуть бути або глобальними або локальними
Для процедур в Visual Basic визначені 2 зони видимості:
Локальні процедури модуля
Видно скрізь всередині модуля, в якому вони оголошені. З інших модулів не видно