Иногда требуется разделять значения переменных между процедурами обработки событий. Например, если приложение выполняет вычисления, всегда используя одинаковую процентную ставку, ее значение должно быть доступно всем процедурам формы. Такие переменные называют переменными уровня формы или уровня модуля (form-level, module-level). На рис. 5-4 показаны области видимости для переменных в проекте Visual Basic с одной формой. Как и оператор Option Explicit, объявление переменных уровня формы происходит в разделе Declarations. Например, если открыто окно Code, можно выбрать (Declarations) для объекта (General) и ввести:
Dim InterestRate As Currency
Зарезервированное слово Private. Visual Basic 5 использует это новое слово Private для обозначения переменных уровня формы. Private работает аналогично оператору Dim, и его можно использовать вместо этого оператора в разделе (General) для формы. Смысл состоит в том, чтобы отделить переменные уровня формы от так называемых глобальных (или public) переменных.
Сохраняем значения
Когда Visual Basic вызывает
процедуру обработки события, старые значения локальных переменных уничтожаются.
Они принимают значения по умолчанию. (Как часто отмечалось, лучше их проинициализировать
заново.) Такие переменные называются динамическими. Однако этого недостаточно
в некоторых ситуациях. Например, необходимо отследить, сколько раз была
нажата командная кнопка. Если счетчик будет все время сбрасываться, сосчитать
будет невозможно. В принципе, можно использовать для таких целей переменные
уровня формы, но лучше применять их только для обмена информацией. Большинство
программистов используют такой подход, только если необходимо считать и
другим процедурам.
Выходом является использование
статических переменных. Такие переменные не инициализируются повторно при
вызове процедуры. Кроме того, что они идеально подходят для счетчиков,
их используют, чтобы сделать элементы управления видимыми либо невидимыми
(вообще говоря, для любых операций с булевыми свойствами), а также в отладочных
целях. Для того чтобы объявить внутри процедуры статическую переменную,
необходимо оператор Dim заменить на зарезервированное слово Static:
Static Counter As Integer, IsVisibie As Boolean
Ниже приведен пример процедуры обработки события с командной кнопкой, которая подсчитывает число щелчков и выводит суммарное значение:
Private Sub Commandl_Click ( )
'Данная процедура использует статическую переменную
для подсчета щелчков
Static Counter As Integer 'Счетчик
начинается с нуля
Counter = Counter + 1
Print Counter End Sub
При первом щелчке счетчику
присваивается значение по умолчанию, то есть 0. Затем Visual Basic добавляет
к нему 1 и затем выводит результат.
Иногда требуется, чтобы все
переменные в процедуре были статическими. Для этого необходимо добавить
зарезервированное слово Static перед строкой Private Sub, с которой начинается
любая процедура:
Static Private Sub Commandl Click ()
Понятие же "физического вакуума" в релятивистской квантовой теории поля подразумевает, что во-первых, он не имеет физической природы, в нем лишь виртуальные частицы у которых нет физической системы отсчета, это "фантомы", во-вторых, "физический вакуум" - это наинизшее состояние поля, "нуль-точка", что противоречит реальным фактам, так как, на самом деле, вся энергия материи содержится в эфире и нет иной энергии и иного носителя полей и вещества кроме самого эфира.
В отличие от лукавого понятия "физический вакуум", как бы совместимого с релятивизмом, понятие "эфир" подразумевает наличие базового уровня всей физической материи, имеющего как собственную систему отсчета (обнаруживаемую экспериментально, например, через фоновое космичекое излучение, - тепловое излучение самого эфира), так и являющимся носителем 100% энергии вселенной, а не "нуль-точкой" или "остаточными", "нулевыми колебаниями пространства". Подробнее читайте в FAQ по эфирной физике.